AngularJS方法附加到范围与控制器范围内

时间:2014-05-02 14:42:00

标签: javascript angularjs

我开始重新考虑我们已经工作了几个月的项目。一路上已经有很多关于Angular的知识,其中许多都将在重新分解中实现。

在此过程中,我注意到很多方法附加到控制器的$scope。其中一些实际上并未被view中的任何内容调用或被观看过,或者除此之外还做其他任何事情而不是开火而忘记。

所以它让我思考。如果任何视图不需要某个方法,或者观察其结果,那么通过不将这些方法附加到$scope可以获得任何性能提升吗?

例如,让我们说,在一个控制器中,我异步地保存了一些数据 - 点火并忘记那些东西。

会这样:

saveState();    
function saveState(){
       // do my saving here. don't need to return anything
}

给我带来任何性能提升:

$scope.saveState();    
$scope.saveState = function(){
     // do my saving here. don't need to return anything
}

1 个答案:

答案 0 :(得分:2)

你刚刚发现了一些非常真实的东西。我实际上说这样做是不好的,因为你正在污染范围。 $ scope应该只有一个直接需要由视图使用的属性。您可能不会注意到较小的应用程序的性能提升,但是当您进入50+控制器范围并且范围内有数千个数据点时,一点点都可以提供帮助。我在Coderwall(https://coderwall.com/p/nsanaa?i=1&p=1&q=author%3Abreck421&t%5B%5D=breck421)写了一篇关于js profiling with flame chart的文章。它可能会帮助你在结论中加上一些数字。

我更进一步思考了我的控制器的初始加载模型。

MyApp.controller('MyController', ['$scope', function ($scope) {
    var self = this;

    this.init = function () {
        this.setScope();
        this.load();
    };

    this.load = function () {
        this.setScopeEvents();
    };

    this.setScope = function () {
        $scope.isLovingStackOverflow = true;
    };

    this.setScopeEvents = function () {
        $scope.answerQuestion = function() { /* answer a question */}
    };

    this.init();
}]);

这样的美妙之处在于你可以从单元测试中调用任何这个。*函数。

我想对你的思想过程改变表示赞赏。在不久的将来,Angular还有更多:)

谢谢,

约旦