Angularjs 监视指令中的变量是在正确的时间触发它的唯一方法吗?

Angularjs 监视指令中的变量是在正确的时间触发它的唯一方法吗?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,您可能已经在大多数angularjs指令中看到了这种模式: return { restrict: 'E', scope: { val: '=' }, link: function($scope) { $scope.$watch('val', function() { // all the code here... }); } }; 我受够了这种模式,我一直在寻找比, 由于$watching每个指令中的变量可能开始有点昂贵 这个问题的目的是如何在正确的时间执行指令

您可能已经在大多数angularjs指令中看到了这种模式:

return {
 restrict: 'E',
 scope: {
   val: '='
 },
 link: function($scope) {
  $scope.$watch('val', function() {
    // all the code here...
  });
 }
};
我受够了这种模式,我一直在寻找比, 由于$watching每个指令中的变量可能开始有点昂贵

这个问题的目的是如何在正确的时间执行指令链接函数代码?换句话说,当指令变量准备就绪时


是否有更好的解决方案?

如果您想收听特定事件,可以使用$broadcast播放特定事件,然后通过$on收听


我不能100%确定你说的是什么意思

变量已经准备好了

但其中一个选项是使用
ng blur
指令,请参见下面的示例

var-app=angular.module('app',[]);
app.directive('someDirective',function(){
返回{
限制:“AE”,
替换为:“true”,
范围:{
val:“=”
},
模板:“”,
链接:功能(范围、要素、属性){
scope.update=函数(){
警报(scope.val);
};
}
};
});
应用控制器('fCtrl',功能($scope){
$scope.data={
瓦尔:“测试”
}
});


在我看来,这种方式是最糟糕的。。。只有在对所有事件都有良好控制的情况下,基于事件的体系结构才是可靠的。若您的体系结构从一开始就不依赖于事件,那个么测试、维护代码和监控几乎是不可能的。这就产生了很多假设:)公平地说,我很少使用$broadcast,通常会避免使用它,但这似乎是你问题的另一种选择:)什么是“当指令变量准备好时”的意思?我说的是在指令的独立范围内定义的变量,这对于链接功能来说是绝对必要的。我个人尽量避免使用$watch。相反,我使用ngClick/ngChange和类似的方法来触发某种处理程序。嗨,Yoshi,你能给我们举一个例子说明你的建议吗?嘿@sss,谢谢你的回答。所谓“变量准备就绪”,我的意思是变量值可以来自多个来源,如服务、输入(如您的示例中)、资源等。大多数源都是异步的,因此问题在于如何在没有$watch的情况下触发link函数,但必须确保变量已经设置。因此,我最终比那个特定用例更“全球化”。无论如何,谢谢你。