因此,我们有一个指令网格,它将指令控制器暴露给角度控制器,这样控制器就可以在指令上调用函数(就像表单控制器一样)。
现在,在我的角度控制器中,只要我从回调动作访问指令控制器,每件事都可以工作。一些$ scope.xx在某些事件上被调用,如click或任何东西。
但是当我尝试在控制器初始化时访问指令控制器时,指令控制器是未定义的,这意味着指令链接函数尚未被调用。
这里有一些代码
function controller() {
$scope.init = function() {
$scope.grid.search(xx)
}
$scope.init() // this will fail, because $scope.grid is undefined.
$scope.onClick = function() {
$scope.grid.search(xx) // this will work
}
}
还有其他方法,除了观察$ scope.grid之外,还要在控制器初始化时调用$ scope.grid.search
答案 0 :(得分:2)
您只需在指令中通过link
函数广播事件。
<div ng-controller="MyCtrl">
<div abc></div>
</div>
myApp.directive('abc', function($rootScope) {
return {
restrict: "EA",
link: function(scope, element, attrs){
$rootScope.$broadcast("initialize");
}
}
});
function MyCtrl($scope) {
$scope.$on("initialize", function(){
alert("Link function has been initialized!");
});
}
我为您创建了 JSFiddle 。
答案 1 :(得分:0)
问题是父控制器总是在子控制器之前调用。
如果要在初始化子指令后运行代码,可以创建指令并将初始化代码放在其链接函数中。
这是有效的,因为父链接函数总是在子链接(和控制器)函数之后调用。