我有自己的控制器(或链接功能)的指令。模板内部使用的指令。模板声明如下:
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
}
};
}]);
答案 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;