Angularjs $watch在焦点丢失时开火

Angularjs $watch在焦点丢失时开火,angularjs,nicescroll,Angularjs,Nicescroll,我有一个textarea标签,上面附有pluggin和ng型号 <textarea id="paper" ng-model="paper"></textarea> 一切都很好,除了onTextChange不仅在我键入内容时触发,而且在我从textareaб点击时触发,以及在我切换到另一个选项卡时触发 我如何防止它,使onTextChange仅在文本更改时触发,这意味着当我键入内容或删除字符时触发 带说明的演示:这里有一个解决方案: 所以问题在于,每当angularjs

我有一个
textarea
标签,上面附有pluggin和ng型号

<textarea id="paper" ng-model="paper"></textarea>
一切都很好,除了onTextChange不仅在我键入内容时触发,而且在我从textareaб点击时触发,以及在我切换到另一个选项卡时触发

我如何防止它,使onTextChange仅在文本更改时触发,这意味着当我键入内容或删除字符时触发

带说明的演示:

这里有一个解决方案:

所以问题在于,每当angularjs告诉应用程序进行消化时,watch就会启动该函数。您所做的是告诉它每次调用“change”函数,而您应该传入checker函数来检查发生的更改。它是关于“监视”,而不是关于“监视更改”——函数参数应该是查看您是否需要执行某些操作

额外说明:

AngularJS在各种元素上设置了各种观察者——这里有更多的信息。我相信模糊对应于触发摘要的ng touched

所以问题在于,每当angularjs告诉应用程序进行消化时,watch就会启动该函数。您所做的是告诉它每次调用“change”函数,而您应该传入checker函数来检查发生的更改。它是关于“监视”,而不是关于“监视更改”——函数参数应该是查看您是否需要执行某些操作

额外说明:

AngularJS在各种元素上设置了各种观察者——这里有更多的信息。我相信模糊对应于触发摘要的ng touched

所以问题在于,每当angularjs告诉应用程序进行消化时,watch就会启动该函数。您所做的是告诉它每次调用“change”函数,而您应该传入checker函数来检查发生的更改。它是关于“监视”,而不是关于“监视更改”——函数参数应该是查看您是否需要执行某些操作

额外说明:

AngularJS在各种元素上设置了各种观察者——这里有更多的信息。我相信模糊对应于触发摘要的ng touched

所以问题在于,每当angularjs告诉应用程序进行消化时,watch就会启动该函数。您所做的是告诉它每次调用“change”函数,而您应该传入checker函数来检查发生的更改。它是关于“监视”,而不是关于“监视更改”——函数参数应该是查看您是否需要执行某些操作

额外说明:


AngularJS在各种元素上设置了各种观察者——这里有更多的信息。我相信模糊对应于触发摘要的ng touched

使用
设置超时
是个坏主意。相反,您可以使用
ng model options=“{getterSetter:true}”
并编写一个方法来获取/设置值(),并在该方法中处理文本更改条件。

使用
setTimeout
是个坏主意。相反,您可以使用
ng model options=“{getterSetter:true}”
并编写一个方法来获取/设置值(),并在该方法中处理文本更改条件。

使用
setTimeout
是个坏主意。相反,您可以使用
ng model options=“{getterSetter:true}”
并编写一个方法来获取/设置值(),并在该方法中处理文本更改条件。

使用
setTimeout
是个坏主意。相反,您可以使用
ng model options=“{getterSetter:true}”
并编写一个方法来获取/设置值(),并在此方法中处理文本更改条件。

您可以使用watch来侦听对纸张的更改,而不是对事件onTextChange的更改。因此,当纸张更改时,它会执行您的函数。nope,通过该语句,我告诉angular注意纸张变量的变化(在$scope中),如果该变量发生变化,则启动我的onTextChanged()函数。因为它是通过ng模型绑定到我的textarea的,所以当我在textarea中键入内容时,应该触发此事件。这会被触发,但不仅当我键入内容时,而且当我只向下/向上滚动并单击离开时。这很奇怪。您使用watch来监听对paper的更改,而不是事件onTextChange。因此,当paper更改时,它会执行您的函数。不,通过该语句,我告诉angular监视paper变量的更改(在$scope中),并在该变量更改时启动我的onTextChanged()函数。因为它是通过ng模型绑定到我的textarea的,所以当我在textarea中键入内容时,应该触发此事件。这会被触发,但不仅当我键入内容时,而且当我只向下/向上滚动并单击离开时。这很奇怪。您使用watch来监听对paper的更改,而不是事件onTextChange。因此,当paper更改时,它会执行您的函数。不,通过该语句,我告诉angular监视paper变量的更改(在$scope中),并在该变量更改时启动我的onTextChanged()函数。因为它是通过ng模型绑定到我的textarea的,所以当我在textarea中键入内容时,应该触发此事件。这会被触发,但不仅当我键入内容时,而且当我只向下/向上滚动并单击离开时。这很奇怪。您使用watch来监听对paper的更改,而不是事件onTextChange。因此,当paper更改时,它会执行您的函数。不,通过该语句,我告诉angular监视paper变量的更改(在$scope中),并在该变量更改时启动我的onTextChanged()函数。因为它是通过ng模型绑定到我的textarea的,所以当我在textarea中键入内容时,应该触发此事件。这会被触发,但不仅当我键入内容时,而且当我只向下/向上滚动并单击离开时。这很奇怪。我认为如果删除setTimeout,就会调用onTextChange方法
$scope.$watch("paper", onTextChange);
setTimeout( 
function() {
    $scope.$watch("paper", function(newtext, oldtext) {
      if (newtext !== oldtext) {
        onTextChange();
      }
    });
  }, 100)