指令的视图不反映模型更改

时间:2015-08-08 10:37:51

标签: angularjs angularjs-directive

我试图弄清楚为什么指令的控制器不会更新数据

BindingSource

Array.BinarySearch<T>

我知道我可以使用$ scope。$ apply()强制更改,但为什么要这样做?

2 个答案:

答案 0 :(得分:1)

setTimeout()不属于任何有角度的核心服务或指令。每当您从核心外部更改范围时,您需要使用$apply()

出于这个原因,angular $timeoutsetTimout()的包装,会在内部调用$apply()

更改为:

angular.module('sample', [])
    .directive('countdown', function ($timeout) {

    function CountdownController() {
        var countdownController = this;

        countdownController.digit = 5;

        $timeout(function () {
            console.log('fired');
            countdownController.digit = 200;
        }, 3000);

    }


    return {
        restrict: 'E',
        controller: CountdownController,
        controllerAs: 'countdownController',
        bindToController: true,
        template: '{{countdownController.digit}}'
    }
});

DEMO

答案 1 :(得分:0)

  

如果您想在一段时间间隔后每次更改模型

     

使用 $ interval 代替 setTimeout()

angular.module('sample', [])
    .directive('countdown', function () {

    function CountdownController($interval) {
        var countdownController = this;

        countdownController.digit = 5;

        $interval(function () {
            console.log('fired');
            countdownController.digit = 200;
        }, 3000);

    }


    return {
        restrict: 'E',
        controller: CountdownController,
        controllerAs: 'countdownController',
        bindToController: true,
        template: '{{countdownController.digit}}'
    }
});
  

'setInterval' vs 'setTimeout'setTimeout or setInterval

     

$timeout vs $interval