AngularJS - 在$ scope函数中调用$ scope函数会发生什么?

时间:2017-06-21 07:50:54

标签: javascript angularjs optimization

我正在编写一些Angular 1.5.3代码,我想知道你有一个$ scope函数调用另一个范围函数的情况。

E.g。

$scope.clickMe = function() {
    $scope.myFunction();
}

$scope.myFunction = function() {
    console.log('yadda');
}

当您执行此操作时,Angular内部会发生什么?这是不好的做法吗?

这样做会更好:

function myFunction() {
    console.log('yadda');
}

$scope.clickMe = function() {
    myFunction();
}

$scope.myOtherFunction= function() {
    myFunction();
}

2 个答案:

答案 0 :(得分:0)

这不是一个坏习惯。 AngularJS并不关心你调用的函数。唯一的“问题”可能是您$scope的污染。

鉴于$scope具有与JavaScript中任何其他Object一样的原型继承,它可能会很快被污染。每次创建嵌套的$scope时,它都将继承其所有父属性和方法。出于这个原因,最好将属性/方法保留在$scope之外,除非您希望子组件/控制器继承它们,或者您需要从模板中访问它们。

答案 1 :(得分:0)

您的代码的第一个片段。将所有函数附加到$scope对象。

$scope.clickMe = function() {
    $scope.myFunction();
}

$scope.myFunction = function() {
    console.log('yadda');
}

所以这种方式假设你有嵌套范围。父作用域上的所有属性和函数都可用于其子作用域。此外,您还可以从view/template

访问这些属性和功能

另一方面,您的第二个代码段避免了子范围继承的所有函数和属性。在这种情况下,myFunction将在此范围内可用,即只有此范围内的函数可以调用/访问此函数。此外,您无法从视图/模板访问此功能。这种范围的私有函数不可见

function myFunction() {
    console.log('yadda');
}

$scope.clickMe = function() {
    myFunction();
}

$scope.myFunction = function() {
    myFunction();
}

现在给它这个让你决定哪个更适合你。我个人认为第二种方法更好。将过多的逻辑附加到范围是不好的做法,因为这会污染范围。您可以将这些函数扩展到您希望可供子/嵌套范围使用的范围,并且可以从视图/模板访问,并且您可以保持对该范围的私有。

For refrence See this Question

希望有所帮助:)