搜索

首页  >  问答  >  正文

angular.js - $watch监视下拉框,网页刷新时会自动执行一次,如何禁止自动执行?

详细描述:
$watch监视一个下拉框,期望情况是只有当用户点击下拉框中的选项时,前端才请求后端更新数据。

目前的问题是:
当网页加载时,下拉框第一次出现,$watch会自动执行一次,ng的机制认为加载就是一次用户的点击。

希望了解如何禁止这种情况的$watch自动执行

漂亮男人漂亮男人2744 天前899

全部回复(3)我来回复

  • 迷茫

    迷茫2017-05-15 17:06:22

    谢邀。

    首先,我可否纠正一个用词的小瑕疵。

    你说“$watch监视一个下拉框”,ng是一个实现数据双向绑定的,具有声明式API的框架,这里的$watch是不可能去监视一个DOM元素下拉框的。合适的用词可以写作"$watch监视的一个指向下拉框所选值的表达式"更为准确(语文好的朋友可以再优化)。

    在提问时,我们往往过分关注自己想知道问题的答案,而忽略表达方式,结果经常无疾而终,这类题目在sf中非常常见,提问人描述含糊其辞,令人无从做答。其实题主的描述还能看懂,只是有感而发多说几句。

    言归正传,既然不想对数据初始化的那一次$watch做处理,那可以这样判断一下

    $scope.$watch('表达式', function(newVal, oldVal){
        //当之前值和当前值相同,或者之前值为null或undefined时
        if(newVal === oldVal || oldVal == null){
            //不执行任何操作
            return;
        }
        
        //你的正常代码,写这里
    });

    回复
    0
  • PHPz

    PHPz2017-05-15 17:06:22

    雷雷


    雷雷

    回复
    0
  • 習慣沉默

    習慣沉默2017-05-15 17:06:22

    使用ngChange可以避免初始化的调用

    注意:

    • 需要结合ngModel一起使用

    • 使用程序更改ngModel的值并不会触发ngChange

    Evaluate the given expression when the user changes the input. The expression is evaluated immediately, unlike the JavaScript onchange event which only triggers at the end of a change (usually, when the user leaves the form element or presses the return key).

    ngChange 文档

    回复
    0
  • 取消回复