AngularJS指令的控制器在页面控制器之后执行

时间:2014-11-06 17:41:47

标签: angularjs angularjs-directive

我有自己的控制器(或链接功能)的指令。模板内部使用的指令。模板声明如下:

 when('/dashboard', {
        templateUrl: 'views/dashboard/dashboard.html',
        controller: 'DashboardCtrl',               
 }).

问题在于指令的控制器在 DashboardCtrl之后执行,因为我想使用由指令设置的值。我怎么能首先执行指令的控制器(DashboardCtrl之前)?

angular.module('directives')
    .directive('timeRangePicker', ['timeService', function (timeService) {
    return {
        restrict: 'E',
        scope: {
            ngModel: '='
        },
        templateUrl: 'views/time-range-picker.html',

        link: function ($scope, elem, 

            $scope.ngModel = {};

            $scope.ngModel.dateFrom = today(); // initial value
            $scope.ngModel.dateTo = tomorrow(); // initial value
        }
    };

}]);

1 个答案:

答案 0 :(得分:1)

嗯,技术上你是CANT(页面控制器将在模板评估之前执行)

我不会骗你,你想要做的事似乎是非常糟糕的原因,但无论如何,这里我会怎么做:

我会让我的DashboardController等待(监视)范围内的属性,由指令控制器初始化。所以这样,我会在执行指令控制器后从页面控制器执行该函数。

但又一次:你为什么要这样做?页面根控制器行为不应取决于它的内容。

父控制器上的

$scope.state = { directiveInit : false }; // dont use direct primitive else the child directive wont update it on the parent scope
$scope.$watch("state.directiveInit", function(init) { if(init==true) { /* do the stuff*/}});

在指令链接fn或控制器上:

$scope.state.directiveInit = true;