首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义属性双向绑定无效

自定义属性双向绑定无效
EN

Stack Overflow用户
提问于 2015-06-10 11:43:14
回答 2查看 76关注 0票数 1

在这个例子中,我面临两个问题

https://jsfiddle.net/1g6kvxst/

  1. 显然,<b>{{moo}}</b>没有更新。表达式{{moo}}不是应该是双向绑定的吗?
  2. 而且可能是因为第一个问题,我在链接回调中有关指令my-var attr值的监视表达式没有更新。

我遗漏了什么?感谢你的帮助。

视图

<section ng-app="myApp" ng-controller="myController"> <div my-directive my-var="moo"></div> <span>Result:</span> <b>{{moo}}</b> </section>

指令

代码语言:javascript
复制
App.directive('myDirective', function () {
    return {
        restrict: 'A',
        scope:{
            myVar: '='
        },
        link: function (scope, element, attrs) {
            scope.$watch(scope.myVar, function() {          
                console.log('my var changed to: ', scope.myVar);
            });
        }
    };
});

控制器

代码语言:javascript
复制
var ctrls = angular.module('controllers',[]);
ctrls.controller('myController', ['$scope', function ($scope) {
    $scope.moo = 0; 
    var t = setInterval(function(){
        $scope.moo++;
    },1000);
}]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 11:50:29

使用手表重新评估视图中的变量。这些手表是在角的异步函数中构建的,如$timeout$http等。当使用本机setTimeout时,setTimeout的摘要周期不会捕捉到这种变化;

使用角的$interval服务而不是本机javascript间隔:

代码语言:javascript
复制
var t = $interval(function(){
    $scope.moo++;
},1000);

不要忘记注入控制器:

代码语言:javascript
复制
ctrls.controller('myController', ['$scope', '$interval', function ($scope, $interval) {

要使$watch工作,请注意键而不是对象:

代码语言:javascript
复制
scope.$watch('myVar', function() {

JSFIDDLE

票数 2
EN

Stack Overflow用户

发布于 2015-06-10 11:46:05

使用$interval而不是setInterval,当您使用setTimeout时,changes不会运行摘要循环,因此您的指令范围不知道任何更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30755323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档