你的問題不是要通過傳遞特殊字符來解決。你被誤導了。
ng-click
中的表達式存在語法錯誤。一定要記住,這就像「javascript代碼」(或「javascript表達式」更精確)。我的意思是,你會在JavaScript中輸入以下內容嗎?
open(/test/obj['test-attr']/update/)
...這不會在JavaScript中飛行。 /test/
和/update/
是字符串文字,應引用。要連接所有這些字符串,請使用良好的舊+(加號)符號。概括起來講,它應該看起來像:
open('/test/' + obj['test-attr'] + '/update/')
這裏是很好的語法(和工作Plunker):
<a ng-click="open('/test/' + obj['test-attr'] + '/update/')"
href="/test/{{ obj['test-attr'] }}/update/">{{ obj['test-attr'] }}
</a>
http://plnkr.co/edit/uctqC5ByrR0wMvYUI5nX
潛在第二個問題:本以下是Off-Topic但與Plunker中的代碼相關。它並沒有真正回答原來的問題,但這是我在測試Plunker示例時碰到的一個問題。
Angular Expressions中的window.open()不直接可用。
這些表達式不完全是「Javascript」,而是「AngularJS表達式」。
它看起來代碼試圖調用「open()」(一個全局JavaScript對象 - 在「AngularJS表達式」中無法訪問)。 Angular對全球可訪問性進行嚴格控制。
我的意思是,你只能在這些表達式中真正地訪問$ scope中的東西。因此我在$ scope中創建了一個「open」方法,它只需調用$ window.open()。 ($ window是單元測試/模擬的「窗口」AngularJS包裝,這是調用全局JavaScript函數的角度方式)。
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $window) {
$scope.obj = { "test-attr": "testAttrData" };
$scope.open = function() { $window.open.apply(null, arguments); }
});
我還懷疑你可能有一個第三個問題:本open()
將被調用,但不會阻止href
採取的措施重新加載頁面的正常效果。如果是這樣的情況下,只需在ng-click
表達添加$event.preventDefault();
:
ng-click="open('/test/' + obj['test-attr'] + '/update/'); $event.preventDefault();"
更換你的第一個單引號到雙引號'NG點擊=「打開(/測試/ OBJ [‘測試ATTR’] /更新/) 「' – worldask 2014-10-12 04:43:32
@worldask讓它成爲答案,不是嗎? – 2014-10-12 05:01:21
嘗試添加轉義雙引號圍繞您的打開參數'ng-click =「打開(\」/ test/obj ['test-attr']/update/\「)」' – worldask 2014-10-12 05:15:22