gpt4 book ai didi

javascript - 在 angularjs Controller 范围内声明函数和属性但不附加到 $scope

转载 作者:行者123 更新时间:2023-11-29 10:42:02 24 4
gpt4 key购买 nike

最近我一直在通过以下方式为我的 angularJS Controller 声明函数和属性(应用程序设置为主应用程序 Angular 模块):

app.controller('myController', ['$scope', function($scope) {
$scope.myProperty = "hello world";
$scope.myFunc = function() {
// do stuff
};
}]);

一段时间后, Controller 的 $scope 增长到包含许多实用函数和属性,这些函数和属性不会直接在我的 View 中使用,也不适用于其他 Controller ,所以我将其更改为:

app.controller('myController', ['$scope', function($scope) {
var myProperty = 0, addOne;

addOne = function(i) {
return i++;
};

$scope.myFunc = function() {
myProperty = addOne(myProperty);
// do other stuff
};
}]);

这工作正常,但可以按照上面显示的方式声明函数和属性吗?还是我应该将它们提取到服务中?我可以在我的 Controller 中从 jasmine/karma 单元测试 var 声明的函数吗(尝试但没有成功)?应遵循的最佳模式是什么?

我研究过使用“this”关键字来完成上面显示的同样的事情,但我认为增加的值(value)不会超过将所有内容转换为这种模式所花费的时间。如果这是完全错误的,请提出更好的策略。

---更新---

回答我自己关于在 Controller 中测试 var 声明函数的问题:How can we test non-scope angular controller methods?

最佳答案

作为一般规则,如果您不打算在 View 中使用变量或函数,请不要将其附加到作用域。因此,根据其用途在 Controller 或范围内声明您的变量和函数。您不想在 $scope 上放置不必要的东西,因为这会减慢摘要周期。作为最佳实践,我在我的 Controller 中遵循这种格式:

app.controller('MainCtrl', function($scope) {

// controller variables
var age = 123;

// scope variables
$scope.name = 'John';

// controller functions
var helloWorld = function() {
console.log('do work');
}

// scope functions
$scope.isOld = function() {
return age > 50;
}

});

关于javascript - 在 angularjs Controller 范围内声明函数和属性但不附加到 $scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27022628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com