我一直在 AngularJS 中使用指令,它使用从控制器的 $scope 获取的数据构建一个 HTML 元素。当我的控制器从服务器获取它的 JSON 数据时,我让我的控制器设置了一个 $scope.ready=true 变量。这样,指令就不必在每次获取数据时一遍又一遍地构建页面。
以下是事件发生的顺序:
控制器页面加载路由并触发控制器功能。
该页面扫描指令并触发此特定指令。
该指令构建元素并评估其表达式并继续前进,但是当指令链接函数被触发时,它等待控制器“准备好”。
准备就绪后,会触发一个内部函数,然后继续构建部分函数。
这行得通,但代码很乱。我的问题是有没有更简单的方法来做到这一点?我可以抽象我的代码以便在我的控制器触发事件后触发它吗?而不必制作这个 onReady 内部方法。
这是它的样子(它可以工作,但很难测试):
angular.module('App', []).directive('someDirective',function() {
return {
link : function($scope, element, attrs) {
var onReady = function() {
//now lets do the normal stuff
};
var readyKey = 'ready';
if($scope[readyKey] != true) {
$scope.$watch(readyKey, function() {
if($scope[readyKey] == true) {
onReady();
}
});
}
else {
onReady();
}
}
};
});