gpt4 book ai didi

angularjs - 在 AngularJS 中暂停 $watch

转载 作者:行者123 更新时间:2023-12-03 08:09:46 25 4
gpt4 key购买 nike

this jsfiddle ;我有两组输入框,通过 ng-model 附加了范围变量。

把这个系统想象成一个谷歌风格的搜索,有一个搜索框和一个“高级搜索”。

  • 当更新单个搜索输入时(在示例中为 a),则有一个函数可以更新相关的“高级”输入。我已经在 $scope.$watch('a', ... ) 中实现了这个.
  • 当“高级”搜索输入被编辑时,单个输入也应该被更新(在 $scope.$watch('b', ... ) 中实现。

  • 当然,这两个会产生一个反馈回路—— a更新 b然后反之亦然,无穷无尽 - 这不好!我希望能够在上述每个 watch 开始时发出“暂停其他观察者”命令,然后(在更新其他变量后)发出“重新启动观察者”命令以防止这种情况发生。

    有没有办法做到这一点?

    最佳答案

    我整理了一个简单的例子。

    <body ng-app="app" ng-controller="myTestCntrl">
    <input type="button" ng-click="increaseCounter()" value="Click me" /> clicked: {{counter}z} times<br/>
    <input type="button" ng-click="pauseWatcher()" value="{{watcherBtnText}}" /> watched: {{internalCounter}} times<br/>
    <strong>Number of $$watchers in $scope:</strong> {{$$watchers.length}}
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
    <script type="text/javascript">
    angular.module('app', [])
    .controller('myTestCntrl', function myTestCntrl($scope) {
    $scope.counter = 0;
    $scope.pauseWatching = false;
    $scope.watcherBtnText = 'Pause';
    $scope.internalCounter = -1;
    $scope.increaseCounter = function() {
    $scope.counter++;
    };
    var listenerFn = function() {
    if ($scope.pauseWatching) {
    namedWatcher();
    } else {
    $scope.internalCounter++;
    };
    }
    var namedWatcher = $scope.$watch('counter', listenerFn);
    $scope.pauseWatcher = function() {
    if ($scope.pauseWatching) {
    $scope.watcherBtnText = 'Pause';
    $scope.pauseWatching = false;
    $scope.internalCounter--;
    namedWatcher = $scope.$watch('counter', listenerFn);
    } else {
    $scope.watcherBtnText = 'Continue';
    $scope.pauseWatching = true;
    namedWatcher();
    };
    }
    });
    </script>
    </body>

    jsfiddle 上的演示:http://jsfiddle.net/BuriB/63sND/

    关于angularjs - 在 AngularJS 中暂停 $watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16592419/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com