Javascript 如何在angular js中定制$watch?

Javascript 如何在angular js中定制$watch?,javascript,angularjs,Javascript,Angularjs,我想要一块定制的$watch。我要用一个变量做这块表。我想当一个变量的值被改变时看到一条消息,当这个变量没有改变时看到另一条消息 下一个例子是:我有一个文本框,当用户写东西时,我会在其中观看。我想在他写东西时看到一条消息,在他停下来看另一条消息时看到另一条消息。您可以通过超时检查: $scope.$watch("myVar", function handleMyVarChange( newValue, oldValue ) { //C

我想要一块定制的
$watch
。我要用一个变量做这块表。我想当一个变量的值被改变时看到一条消息,当这个变量没有改变时看到另一条消息


下一个例子是:我有一个文本框,当用户写东西时,我会在其中观看。我想在他写东西时看到一条消息,在他停下来看另一条消息时看到另一条消息。

您可以通过超时检查:

$scope.$watch("myVar",
              function handleMyVarChange( newValue, oldValue ) {
                 //Change Display Message to Editing Message

                 //Timeout to checkif stop writing
                 $timeout(function (newValue) {
                 if(newValue === myVar) {
                   //Change Display Message to Not Editing Message
                }
               }, 100);
             }
);

您可以使用超时进行检查:

$scope.$watch("myVar",
              function handleMyVarChange( newValue, oldValue ) {
                 //Change Display Message to Editing Message

                 //Timeout to checkif stop writing
                 $timeout(function (newValue) {
                 if(newValue === myVar) {
                   //Change Display Message to Not Editing Message
                }
               }, 100);
             }
);

我推荐的概念在许多javascript库中称为
debounce
。您给出了一个要调用的函数,以及在触发回调之前必须经过一段时间才能再次调用该函数。通常情况下,您还可以提供在初始调用时触发回调的选项。这将允许您在第一次调用时翻转开关,然后在一段时间后将其翻转回来,而不会再次调用该函数

见:

例:

(更好的示例是使用
$timeout
创建一个
debounce
服务,无需
$scope.$evalAsync()


我推荐的概念在许多javascript库中称为
debounce
。您给出了一个要调用的函数,以及在触发回调之前必须经过一段时间才能再次调用该函数。通常情况下,您还可以提供在初始调用时触发回调的选项。这将允许您在第一次调用时翻转开关,然后在一段时间后将其翻转回来,而不会再次调用该函数

见:

例:

(更好的示例是使用
$timeout
创建一个
debounce
服务,无需
$scope.$evalAsync()


您是否尝试在手表中使用计时器检查用户是否停止编辑文本框?为什么需要自定义$watch?你只需要在现场观看模型。就像我想在用户停止在文本框中键入时看到一条消息一样,您可以设置一个计时器,当用户写入时,如果他不断更改文本,请给1秒钟时间,然后显示一条消息。是否尝试在手表中使用计时器检查用户是否停止编辑文本框?为什么需要自定义$watch?你只需要在现场观看模型。就像我想在用户停止在文本框中键入时看到一条消息一样,您可以设置一个计时器,当用户写入时,给1秒钟,然后显示一条消息,如果他不断更改文本,请更新计时器。实际上,您应该在onFocus和onBlur等事件中这样做。同意Miguel的说法,最好使用onFocus/onBlur来更改消息,除非即使焦点继续在文本框上,您也要更改消息。实际上,您应该使用onFocus和onBlur这样的事件来更改消息。同意Miguel的意见,最好使用onFocus/onBlur来更改消息,除非即使焦点继续在文本框上,您也要更改消息。