我正在编写一些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();
}
答案 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
希望有所帮助:)