Javascript 自定义属性双向绑定不起作用

Javascript 自定义属性双向绑定不起作用,javascript,angularjs,Javascript,Angularjs,在这个例子中,我面临两个问题 显然,{{moo}}没有更新。表达式{{moo}}不应该是双向绑定吗 可能是因为第一个问题,我在链接回调中关于指令myvarattr值的监视表达式没有更新 我错过了什么?谢谢你的帮助 查看 结果:{{moo}} 指令 App.directive('myDirective', function () { return { restrict: 'A', scope:{ myVar: '='

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

  • 显然,
    {{moo}}
    没有更新。表达式
    {{moo}}
    不应该是双向绑定吗
  • 可能是因为第一个问题,我在链接回调中关于指令
    myvar
    attr值的监视表达式没有更新
  • 我错过了什么?谢谢你的帮助

    查看

    
    结果:{{moo}}
    

    指令

    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);
                });
            }
        };
    });
    
    控制器

    var ctrls = angular.module('controllers',[]);
    ctrls.controller('myController', ['$scope', function ($scope) {
        $scope.moo = 0; 
        var t = setInterval(function(){
            $scope.moo++;
        },1000);
    }]);
    

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

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

    Angular使用手表重新计算视图中的变量。这些手表内置angular的异步功能,如
    $timeout
    $http
    等。当使用本机
    设置超时时,angular的摘要周期不会拾取该变化

    使用angular的
    $interval
    服务代替本机javascript间隔:

    var t = $interval(function(){
        $scope.moo++;
    },1000);
    
    不要忘记注入控制器:

    ctrls.controller('myController', ['$scope', '$interval', function ($scope, $interval) {
    
    要使
    $watch
    工作,请观察按键而不是对象:

    scope.$watch('myVar', function() {
    

    Angular使用手表重新评估视图中的变量。这些手表内置angular的异步功能,如
    $timeout
    $http
    等。当使用本机
    设置超时时,angular的摘要周期不会拾取该变化

    使用angular的
    $interval
    服务代替本机javascript间隔:

    var t = $interval(function(){
        $scope.moo++;
    },1000);
    
    不要忘记注入控制器:

    ctrls.controller('myController', ['$scope', '$interval', function ($scope, $interval) {
    
    要使
    $watch
    工作,请观察按键而不是对象:

    scope.$watch('myVar', function() {
    

    您可能是指
    $interval
    而不是
    $timeout
    您可能是指
    $interval
    而不是
    $timeout
    10x,它解决了第一个问题,但是指令中的my
    $watch
    表达式没有更新。您需要查看
    'myVar'
    (键),而不是
    scope>scope.myVar
    (对象引用)谢谢,感谢它10x解决了第一个问题,但指令中我的
    $watch
    表达式仍然没有更新。您需要查看
    'myVar'
    (键),而不是
    scope.myVar
    (对象引用)谢谢,感谢