[英]How to pass a function handler from controller into directive isolated scope in AngularJs?
[英]How to pass an object from a nested directive with isolated scope to parent controller scope in angular
我有一個指令樹視圖,其中包含每個呈現項目的嵌套指令(作為分支)。
在兩個指令的范圍內,我已經聲明了兩個應該與父控制器通信的參數。
filter: '&'
//將嵌套指令(branch)中的方法過濾器綁定到樹指令屬性中的方法doSomething(),該屬性綁定到綁定到控制器的html指令。
iobj: '='
是應該將范圍對象傳遞給控制器的雙向綁定參數。 (但目前不是)
指示:
app.directive('tree', function () {
return {
restrict: 'E',
replace: true,
scope: {
t: '=src',
filter: '&',
iobj: '='
},
controller: 'treeController',
template: '<ul><branch ng-repeat="c in t.children" iobj="object" src="c" filter="doSomething()"></branch></ul>'
};
});
app.directive('branch', function($compile) {
return {
restrict: 'E',
replace: true,
scope: {
b: '=src',
filter: '&',
iobj: '='
},
template: '<li><input type="checkbox" ng-click="innerCall()" ng-hide="visible" /><a>{{ b.name }}</a></li>',
link: function (scope, element, attrs) {
var has_children = angular.isArray(scope.b.children);
scope.visible = has_children;
if (has_children) {
element.append('<tree src="b"></tree>');
$compile(element.contents())(scope);
}
element.on('click', function(event) {
event.stopPropagation();
if (has_children) {
element.toggleClass('collapsed');
}
});
scope.innerCall = function () {
scope.iobj = scope.b;
console.log(scope.iobj);
scope.filter();
}
}
};
});
HTML:
<div ng-controller="treeController">
<tree src="myList" iobj="object" filter="doSomething()"></tree>
<a ng-click="clicked()"> link</a>
</div>
控制器:
app.controller("treeController", ['$scope', function($scope) {
var vm = this;
$scope.object = {};
$scope.doSomething = function () {
var item = $scope.object;
//alert('call from directive');
console.log(item);
}
$scope.clicked = function () {
alert('clicked');
}
...
目前我可以從指令調用函數$scope.doSomething
到控制器。 所以我知道我可以從指令訪問控制器范圍。 我無法弄清楚的是如何將一個對象作為參數從指令傳遞回控制器。 當我運行此代碼時, $scope.object
始終是一個空對象。
我很感激有關如何解決這個問題的任何幫助或建議。
&
directive綁定支持參數傳遞。 舉個例子
scope.filter({message: 'Hello', anotherMessage: 'Good'})
message
和anotherMessage
成為綁定到指令的表達式中的局部變量:
<tree src="myList" iobj="object" filter="doSomething(anotherMessage, message)"></tree>
這是一個示例plunker ,其中回調參數在模板中設置。
文件明確指出:
通常需要通過表達式將數據從隔離范圍傳遞到父范圍,這可以通過將局部變量名稱和值的映射傳遞到表達式包裝器fn來完成。 例如,如果表達式是
increment(amount)
那么我們可以通過將localFn
稱為localFn({amount: 22})
來指定金額值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.