怀疑AngularJS中的数据绑定

时间:2014-05-05 16:37:53

标签: javascript angularjs

我正在通过我的第一个应用程序来学习AngularJS。到目前为止,一切正常,我很兴奋:)。

但是现在我有一个控制台.log让我很困惑,我开始以为我完全错过了什么。

我有一个绑定到控制器的简单标签:

<h2 ng-controller='HeaderController' ng-show='data.actualSection > 0'>
    {{titleForSection()}}
</h2>

控制器非常简单:

    uxctModule.controller ('HeaderController', function ($scope, ModelData){
    $scope.data = ModelData;

    $scope.titleForSection = function () {
        console.log ("RETURNING IT");
        return ("I SHOULD RETURN YOU SOMETHING");
    }
});

令我感到困惑的是,我注意到每次模型中的某些内容发生变化时,都会触发该功能。 控制器如何在没有$ watch的情况下持续执行该功能?

2 个答案:

答案 0 :(得分:4)

角度数据绑定是通过摘要循环完成的,这意味着角度循环反复检查变化,并且在绑定到函数的函数的情况下,必须评估寻找变化。

这就是将UI绑定到函数结果通常是个坏主意的原因。 相反,你应该做这样的事情:

标记:

<h2 ng-controller='HeaderController' ng-show='data.actualSection > 0'>
    {{sectionTitle}}
</h2>

控制器:

$scope.sectionTitle = 'I SHOULD RETURN YOU SOMETHING';
//and update it dynamically
$scope.funcToUpdateTitle = function(newTitle){
    $scope.sectionTitle = newTitle;
};

答案 1 :(得分:1)

实际上在angularJS中,所有与视图相关的函数都将被调用,因为你在HTML中调用了titleForSection(),因为你在HTML中调用了{{1}}所以当HTML中发生事件时,会导致函数被执行。

希望它有所帮助!