加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – $watch只在内部指令中触发一次

发布时间:2020-12-17 08:45:38 所属栏目:安全 来源:网络整理
导读:我是角度js的新手,所以请一些人帮帮我.我的模板在这里: form ng-model="signup" form-valid input type="text" name="username" ng-model="signup.username"{{signup}}/form 我的指示是这样的: app.directive("formValid",function(){ return { restrict:"
我是角度js的新手,所以请一些人帮帮我.我的模板在这里:
<form ng-model="signup" form-valid>
    <input type="text" name="username" ng-model="signup.username">{{signup}}
</form>

我的指示是这样的:

app.directive("formValid",function(){

 return {
    restrict:"A",require:"ngModel",link:function(scope,element,attrs){
          scope.$watch(attrs.ngModel,function(newValue){
              if(newValue){
                 console.log(newValue);
              }
          });
       }
   }});

当我在文本框中输入一些值时,模型正在改变,因此“$watch”应该被触发.但是在这里“$watch”只在我第一次在文本框中输入任何值时被触发一次.谢谢预先.

使用ngModelController时,观察模型更改的标准方法是创建格式化程序:
link: function(scope,attrs,ngModelCtrl) {
    ngModelCtrl.$formatters.push(function(value) {
        // Do something with value
        return value;
    });
}

请记住,仅在直接更改模型时才会触发格式化程序.如果更改来自UI(即用户更改某些内容),则会触发解析器.所以你可能也需要这样做:

ngModelCtrl.$parsers.push(function(value) {
    // Do something with value
    return value;
});

Working Plunker

我建议您阅读ngModelController文档,以便准确了解这些管道的工作原理.

但是,如果您想要做的只是在模型更改时得到通知(您不希望或不需要格式化或解析任何内容),那么您可以做一些更简单的事情:

scope: { model: '=ngModel' },link: function(scope) {
    scope.$watch('model',function(value) {
        // Do something with value
    });
}

Working Plunker

但是根据你的指令名称formValid,我认为使用ngModelController是正确的方法.

UPDATE

值得一提的是,ngModelController可能存在一个缺点:它与“引用”类型(例如数组,对象)的效果不佳.更多细节可以在here找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读