我在另一個指令中有一個指令。外部指令與控制器共享其範圍,而內部指令有自己的範圍。我想將控制器的函數引用傳遞給內部指令,以便可以從那裏調用它。但我不知道如何將函數及其參數傳遞給內部指令,以便它可以正確調用控制器的函數。AngularJs:從另一個指令中的指令調用控制器方法
這裏是planker來說明我的問題。
如果您點擊「Dir 2 Click me」,則警報顯示參數未定義。
我在另一個指令中有一個指令。外部指令與控制器共享其範圍,而內部指令有自己的範圍。我想將控制器的函數引用傳遞給內部指令,以便可以從那裏調用它。但我不知道如何將函數及其參數傳遞給內部指令,以便它可以正確調用控制器的函數。AngularJs:從另一個指令中的指令調用控制器方法
這裏是planker來說明我的問題。
如果您點擊「Dir 2 Click me」,則警報顯示參數未定義。
您可以在外部控制器方法通過使用'='
並相應地調整代碼...
angular.module('app', [])
.controller('ctrl', function($scope){
$scope.myCtrlMethod = function(msg, b) {
alert(msg + ' and b='+b);
};
})
.directive('dir1', [function(){
return {
restrict: 'E',
replace: true,
template: '<div><p ng-click="myDir1Method(\'my dir1 method\',\'b\')">Dir 1 Click me</p><dir2 my-ctrl-method="myCtrlMethod"></dir2></div>',
link: function(scope, elem, attrs){
scope.myDir1Method = function(msg,b){
scope.myCtrlMethod(msg, b);
};
}
};
}])
.directive('dir2', [function(){
return {
restrict: 'E',
scope: {
myCtrlMethod: '='
},
replace: true,
template: '<p ng-click="myDir2Method(\'my dir2 method\',\'b\')">Dir 2 Click me</p>',
link: function(scope, elem, attrs){
scope.myDir2Method = function(msg,b){
scope.myCtrlMethod(msg, b);
};
}
};
}]);
Plunker :http://plnkr.co/edit/xbSNXaSmzWa3G1GSH6Af?p=preview
編輯:'='
評估th e表達式在父範圍的上下文中,其結果綁定到內部範圍的屬性上。在這個例子中,'myCtrlMethod'是根據父作用域評估的,它從父作用域(一個函數)返回myCtrlMethod
。該函數在內部範圍上綁定到myCtrlMethod
,可以用scope.myCtrlMethod(msg, b)
調用。
只要把控制器上的範圍:$scope.$b=this;
它似乎並沒有爲我工作。當我點擊「Dir 2 Click me」時,它仍然顯示** msg **參數爲undefined。 –
你可以使用控制器作爲參考,您的指令
你的例子工作正常。但是當我修改jsbin以匹配我的示例時,它停止工作。 http://jsbin.com/caxoheno/2/edit –
試試這個:http://jsbin.com/caxoheno/3/edit, 問題是,它不是全局函數,它是你的控制器範圍內的關鍵。 使用$ scope.yourMethod,或使用Ctrl作爲Ctrl並從DOM獲取訪問權限 – a8m
這是解決我的問題的另一種方法。不幸的是,我不能有兩個被接受的答案,第一個答案更適合我。無論如何感謝一堆! –
它確實有用,非常感謝!但我認爲'='用於綁定到外部作用域的屬性。你可以給出一個簡短的解釋或提供一個爲什麼這個作品的鏈接? –
沒問題...綁定變量的不同方法確實令人困惑。更新與解釋。 –