当前位置: 首页 > 面试题库 >

AngularJS:基本的$ watch不起作用

冷宏茂
2023-03-14
问题内容

我正在尝试在AngularJS中设置手表,但我显然做错了,但我不太清楚。手表在立即加载页面时触发,但是当我更改观察值时,它不会触发。作为记录,我还在匿名函数上设置了监视以返回监视的变量,但结果完全相同。

我在下面整理了一个最小的示例,在控制器中进行了所有操作。如果有所不同,我的实际代码将挂接到指令中,但是两者都以相同的方式失败。我觉得我必须缺少一些基本的东西,但我只是看不到。

HTML:

<div ng-app="testApp">
    <div ng-controller="testCtrl">
    </div>
</div>

JS:

var app = angular.module('testApp', []);

function testCtrl($scope) {
    $scope.hello = 0;

    var t = setTimeout( function() { 
        $scope.hello++;
        console.log($scope.hello); 
    }, 5000);

    $scope.$watch('hello', function() { console.log('watch!'); });
}

超时有效,可以hello递增,但是手表不会触发。

演示在http://jsfiddle.net/pvYSu/


问题答案:

这是因为您在不知道Angular的情况下更新了值。

您应该使用$timeout服务而不是setTimeout,而不必担心该问题。

function testCtrl($scope, $timeout) {
    $scope.hello = 0;

    var t = $timeout( function() { 
        $scope.hello++;
        console.log($scope.hello); 
    }, 5000);

    $scope.$watch('hello', function() { console.log('watch!'); });
}

或者,您可以调用$ scope。$ apply();。强制角度重新检查值并在必要时致电手表。

var t = setTimeout( function() { 
    $scope.hello++;
    console.log($scope.hello); 
    $scope.$apply();
}, 5000);


 类似资料:
  • 我试图从书中创建一个简单的servlet,但没有用。 我使用GlassFish服务器开源版本3.1.2.2、jdk1.7.0_10和记事本。 root\WEB-INF\classes\net\ensode\glassfishbook\formhandling\FormHandlerServlet.class : root/web.xml: root/dataentry.html: 我在控制台中通过

  • 问题内容: 我是Socket.IO的100%新手,并且刚刚安装了它。我试图遵循一些示例,并且可以使服务器端运行,但似乎无法使客户端连接。 以下是我的server.js: 这是我的index.html 当我执行node server.js时,它指示socket.io已启动。 当我加载index.html时,出现一行,指出“调试-服务静态/socket.io.js”,但除此之外,没有控制台消息或其他行

  • 问题内容: 我刚刚安装了最新的Xcode Beta,以尝试 Swift 2 和对Apple Watch开发部分的改进。 我实际上很难弄清楚为什么这种基本方法无法在 iOS 和 Watch OS2 之间共享信息。 我跟着这 一步一步的 教程来检查,如果我错过了在这个过程中的东西,如打开同一组的手机应用和扩展双方,但这里是我的了: NOTHING 。 这是我在iPhone应用程序中为ViewContr

  • 问题内容: 我尝试使用AngularJS进行简单的选择下拉列表 这是我的代码: 格式如下: 选择下拉列表出现,但没有任何选择值,我在做什么错? 问题答案: 我相信您缺少ngModel指令,并且以错误的方式调用ng-options指令。 我在这里工作的地方做了个小矮人。

  • 问题内容: 以下HTML,Javascript和JSON可以正确呈现,但该过滤器根本不起作用。我们做错了什么? Javascript: 这两个JSON: api / distributors / my: api /仪表板/目录 问题答案: 角度过滤器无法将对象的对象作为输入。ng- repeat可以渲染它们,但是过滤器需要一个对象数组。解决此问题的最简单方法是让服务器返回没​​有命名键的数组。您还

  • 问题内容: 当我使用我的代码时,但是如果我使用$ http.post,则永远不会将参数获取到请求.php文件中。 这是服务功能: 和控制器功能: 和我的AJAXRequest.php文件 如果我使用 $ http.post() 输出 : 如果我使用 $ http.get(), 我的输出是: 我检查了FireBug工具中的帖子,该帖子将数据发送到我的php文件中。但PHP文件没有参数。 如果我使用