3
我寫了一個指令,將呈現與他們NG-點擊指令子元素,這是我的代碼:能否角指令編譯NG單擊元素
DIRECTIVE
angular.module('myApp')
.directive('popover', [
'$compile',
function($compile) {
return {
scope: {
items: "=",
},
link: function($scope, $element, $attrs){
$.each($scope.items, function(key, value) {
var item = '<a ng-click="'+value.ngClick+'">'+value.name+'</a>';
$element.append($compile(item)($scope));
});
}
}
}
]
);
模板
<div popover items="myItems"></div>
控制器
angular.module('myApp')
.controller('MyCtrl', [
'$scope',
function ($scope) {
$scope.myItems = [
{name: 'Do this', ngClick: 'doThis()' },
{name: 'Do that', ngClick: 'doThat()' },
];
$scope.doThis = function() { console.log('this is done') };
$scope.doThat = function() { console.log('that is done') };
}
]
);
工作正常,我得到一個具有正確屬性ng元素的A元素列表,但函數doThis()和doThat()永遠不會觸發
我想問題是靠近$ compile命令,但是我已經在其他上下文中使用了這個命令,並且它似乎能夠以這種方式正常工作。另外,在Chrome開發工具欄中,我看不到與元素的ng-click指令相關的事件。
有什麼想法? 謝謝
您可以像@etiennecrb一樣執行或者將'$ scope.myItems'改爲'$ scope.myItems = [{name:'這樣做',ngClick:'$ parent.doThis()'},{name :'這樣做',ngClick:'$ parent.doThat()'}];',但我不會推薦這種方式,因爲它是一個醜陋的黑客。 [小提琴](https://jsfiddle.net/themyth92/f6r8nv5o) – themyth92