加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 将函数添加到$scope和指令控制器之间的区别?

发布时间:2020-12-17 07:11:19 所属栏目:安全 来源:网络整理
导读:在浏览egghead视频时,关于 Directive to directive communication的视频建议我们使用控制器向’this’对象添加函数并从其他指令访问它. 视频中使用的完整代码:Adding functions to this object 相关的控制器代码如下: controller: function($scope){ $scop
在浏览egghead视频时,关于 Directive to directive communication的视频建议我们使用控制器向’this’对象添加函数并从其他指令访问它.

视频中使用的完整代码:Adding functions to this object

相关的控制器代码如下:

controller: function($scope){
        $scope.abilities = [];
        this.addStrength = function(){
            $scope.abilities.push("Strength");
        }

        this.addSpeed = function(){
            $scope.abilities.push("Speed");
        }

        this.addFlight = function(){
            $scope.abilities.push("Flight");
        }
    },

我想知道而不是在’this’中添加函数,为什么不将它添加到$scope本身,特别是当我们使用隔离范围时?

代码添加函数到$scope:Adding functions to $scope

相关的控制器代码如下:

controller: function($scope){
        $scope.abilities = [];
        $scope.addStrength = function(){
            $scope.abilities.push("Strength");
        };

        $scope.addSpeed = function(){
            $scope.abilities.push("Speed");
        };

        $scope.addFlight = function(){
            $scope.abilities.push("Flight");
        };
    },

或者为什么控制器功能完全正常.为什么我们不能使用link函数来实现相同的结果?

在链接函数中向$scope添加函数:Using link funtciont instead of controller

相关的控制器和链接功能如下:

controller: function($scope){
        $scope.abilities = [];
        $scope.addStrength = function(){
            $scope.abilities.push("Strength");
        };

        $scope.addSpeed = function(){
            $scope.abilities.push("Speed");
        };

        $scope.addFlight = function(){
            $scope.abilities.push("Flight");
        };
    },

我很确定使用控制器和这个对象是有正当理由的.我无法理解为什么.如果有人能够解释这将有所帮助.

解决方法

您是正确的,您可以在链接功能中公开函数并获得相同的结果.指令控制器有点奇怪,但是当我编写更复杂的指令时,我已经决定将更多的行为推送到控制器中并将与DOM相关的东西留在链接函数中.原因是:

>我可以传入一个控制器名称,而不是在我的指令中包含该函数;事情变得更清洁IMO
>控制器可以公开兄弟或相关指令中使用的公共API,这样你就可以有一些互操作并鼓励SoC.
>如果您愿意,可以将控制器测试与指令编译隔离开来.

我通常只在可能存在复杂的状态转换,处理外部资源(即$http)或者重用是一个问题时才引入控制器.

您应该注意Angular 1.2在指令上公开’controllerAs’,它允许您直接使用指令模板中的控制器并减少$scope组合引入的一些仪式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读