我想使用別人創建的指令來告訴我的指令,當它內部的ngRepeat已完成創建自己。從子指令調用指令功能不工作
我的外部指令有一個隔離範圍,並具有需要由內部指令調用的範圍函數。這是代碼。
angular.module('my.directives')
.controller('myTableCtrl', function($scope, $element, $attrs) {
$scope.tableLoaded = function(tableName){
console.log("Table Loaded");
};
})
.directive('myTable', function() {
return {
restrict: 'EA',
scope: {},
controller: 'myTableCtrl as myTable'
};
})
.directive('repeatDone', function($timeout) {
return function(scope, element, attrs) {
if (scope.$last) {
$timeout(function(){
scope.$eval(attrs.repeatDone);
});
}
}
});
我的HTML看起來像這樣。
<my-table>
<div ng-repeat="row in tableRows" repeat-done="tableLoaded('main');"></div>
</my-table>
之前我添加範圍:{}將mytable的指令,它已經非常迷茫的時候有在頁面上(在tableLoaded函數獲取調用,而是由不對勁兒)多個表,所以我增加了隔離我認爲是最佳實踐的範圍。不幸的是,repeatDone指令現在無法在父myTable指令中看到/調用tableLoaded()函數。
任何幫助將非常感激。
編輯:
只是爲了澄清。 tableLoaded()是myTable指令的一個函數,我希望能夠從repeatDone指令中調用它,然而這可能是table指令內部的元素。除此之外,我不想更改repeatDone指令,repeatDone不需要甚至不需要知道myTable指令。
where where tableRows being defined?它不在您發佈的任何源代碼中。 – user132278
這是我的主頁控制器。另外,我已將表格行模板簡化爲一個div,以便於閱讀。這絕對是有效的,因爲當我從myTable中移除隔離作用域時,表被填充數據並且tableLoaded()函數被正確調用。 – jonhobbs
@jonhobbs爲什麼不使用隔離的範圍,並用'&'將你的函數連接到內部指令? –