Angular:检查控制器是否调用了指令链接函数

时间:2015-01-27 15:22:02

标签: angularjs angularjs-directive

因此,我们有一个指令网格,它将指令控制器暴露给角度控制器,这样控制器就可以在指令上调用函数(就像表单控制器一样)。

现在,在我的角度控制器中,只要我从回调动作访问指令控制器,每件事都可以工作。一些$ 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

2 个答案:

答案 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)

问题是父控制器总是在子控制器之前调用。

如果要在初始化子指令后运行代码,可以创建指令并将初始化代码放在其链接函数中。

这是有效的,因为父链接函数总是在子链接(和控制器)函数之后调用。