2014-10-12 46 views
0

我對角度相當陌生,我正在研究如何在我的應用程序中使用模態的POC。這是我在做什麼:如何在函數中傳遞特殊字符

我有控制器聲明一個函數在該範圍內調用open。打開的函數將url作爲輸入。現在,我需要通過的URL是動態創建的:

<a ng-click="open(/test/obj['test-attr']/update/)" href="/test/{{ obj['test-attr'] }}/update/">{{ obj['test-attr'] }}</a> 

但是這給了我一個解析錯誤。我不知道如何將數據傳遞給控制器​​。

更新:

這個錯誤是因爲報價,而是因爲的/。是否有特殊角色傳遞給函數?

這是錯誤我得到:

Error: [$parse:lexerr] http://errors.angularjs.org/1.2.22/$parse/lexerr?p0=Unexpected%20nextharacter%20&p1=s%205-5%20%5B%5C%5D&p2=open(%5C 
+1

更換你的第一個單引號到雙引號'NG點擊=「打開(/測試/ OBJ [‘測試ATTR’] /更新/) 「' – worldask 2014-10-12 04:43:32

+0

@worldask讓它成爲答案,不是嗎? – 2014-10-12 05:01:21

+0

嘗試添加轉義雙引號圍繞您的打開參數'ng-click =「打開(\」/ test/obj ['test-attr']/update/\「)」' – worldask 2014-10-12 05:15:22

回答

0

你的問題不是要通過傳遞特殊字符來解決。你被誤導了。

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();" 
+0

感謝它工作。關於第二個問題,我使用了在控制器範圍內聲明的open函數。 – 2014-10-12 06:47:54

相關問題