2016-08-16 123 views
1

很明显,应该将方法设置为范围,以便对视图(在html中)或指令或任何其他地方可见或可用该方法应该被访问,以便该方法可以通过$ scope来访问。我的问题是要知道$scope总是必要的,或者在定义方法时使用。例如,以下是不同的方法声明:

方案1. $ scope.myMethod = function(){};
方案2。 var myMethod = function(){};

如果'myMethod'仅用于一个控制器,是否需要将其设置为$ scope?有什么优势或为什么场景1或2好?

如果有人声明它为$ scope.myMethod = function(){}?它是不是很好或$范围的不必要的负载?最佳做法是什么?

注:我不需要做任何调查在这里,请让我知道任何利弊

回答

1

您主要使用的第一个场景的东西像绑定click事件。如果您只打电话给myMethod,您并不需要在范围内进行定义。

例如下面将需要第一个定义:

<button ng-click="myMethod()">My Button</button> 

但下面可以使用第二:

angular.module('myCtrl', []) 
.controller('myController', function($scope) { 
    var myMethod = function (text) {alert(text)}; 
    $scope.mySecondMethod = function() { myMethod('second'); } 
    $scope.myThirdMethod = function() { myMethod('third'); } 

在第二种情况下,你可以使用事件mySecondMethodmyThirdMethod结合。

1

作用域是应用程序控制器和视图之间的粘合剂。 模板链接阶段的指令设置$ watch表达式为 的范围。 $ watch允许向指令通知属性 的更改,从而允许指令将更新的值呈现给 DOM。

这两个控制器和指令都相互参照范围,但不是 。这种安排将控制器与 指令以及DOM隔离开来。这是重要的一点,因为它使得控制器视图不可知,这极大地改进了应用程序的测试故事。

From the documentation

1

您需要$scope定义只有当你调用从html代码功能的方法。您可以使用thissome_names而不是$scope

$scope只是意味着该功能的(mehtod的)范围是controller函数内部和可以从控制器

里面写如果该功能仅在javascript (controller)里面调用的html代码访问,然后使用普通清晰度

function myMethod(){}

OR

var myMethod = function(){}

声明一个methodvariable作为$scope变量只对从DOM访问。如果您在$scope中创建新变量。它只是将该变量添加到$scopeclousure中作为$scope: {first, seccond, third} 当您调用从$ closure返回的$ scope函数时。我估计没有太多的负担到$范围

+0

感谢您的回答。如果某人将其声明为$ scope.myMethod = function(){},该怎么办?是否对范围不好或不必要加载? –

+0

@Débora将'method'或'variable'声明为'$ scope'变量仅用于从** DOM **访问。如果你在'$ scope'中创建一个新变量。它只是将'$ scope'的'clousure'作为'$ scope:{first,seccond,third}'加入变量' 当你调用从'closure'返回的$ scope函数时。我想我的$范围没有太多的负担 –

1

情景1。 $ scope.myMethod = function(){};
情景2。 var myMethod = function(){};

作用域是控制器和视图之间的粘合剂。如果你真的需要 当前视图的任何变量和方法,那么应该将 添加到范围变量中。如果您不想将方法添加到范围,请参阅控制器属性 。

方案1 如果声明使用的范围的方法,那么这将是可用的/从视图访问。

场景2 如果您确实不需要从视图中访问此方法,则可以从该范围中删除此方法。

相关问题