javascript - 定义永久$scope变量

标签 javascript angularjs

所以如果我的很多 Controller 都有这个:

$scope.error = false;
$scope.errorData = {};

$scope.working = false;
$scope.workingMessage = "Doing something, please wait..."; // best UI message ever

有没有办法在给我的 Controller 的每个 $scope 上永久定义这些?

所以我确实需要继承,那么在哪里可以将这些范围变量应用到 $rootScope 以便它能够在我的所有 Controller 中被拾取?

更新

因此,在阅读了大量文档后,似乎使用 ngApp 自动引导 Angular 应用程序,这是在 $injector 服务运行时。我需要在该服务运行之前设置变量,所以我猜测我需要手动引导应用程序。

更多工作

.run()

这在所有模块初始化后运行。所以在这里我可以注入(inject) $rootScope 并将我的变量放在上面。然后它们可以用在我所有的 $scope 上,显然,如果您将数据绑定(bind)到它,那么您可以简单地使用属性名称,因为绑定(bind)器将首先查看 $scope 然后是所有后续父作用域,直到找到该属性。

.run(['$rootScope', rootScopeConfigure]);

function rootScopeConfigure($rootScope) {
    $rootScope.myCustomProperty = "Hey There";
}

根据对我的问题的评论,如果您随机添加属性,这可能会变得危险。但由于我只有几个属性,所以这并不重要,也不会增加那么多开销。 (我希望)。

然而,这一切都带来了一个问题,如果我想在 Controller 中修改这个自定义属性,那么我必须注入(inject)$rootScope。我并不是特别想这样做,我希望能够在 $scope

上访问这些

根据我上面的段落,我应该能够执行 $scope.$root.myCustomProperty 因为我猜测 $rootScope 是所有$scope

肮脏的答案

$rootScope.$oldNew = $rootScope.$new;

$rootScope.$new = function () {
   var childScope = $rootScope.$oldNew();
   childScope.myCustomerProp = "Hey There";

   return childScope;
}

run()函数中执行此操作。基本上覆盖工厂以返回一个新的子作用域,其中包含我的属性:)。

最佳答案

是的,范围可以从父级继承。您可以为您的 Controller 创建一个父 Controller 。

作用域可以从父作用域继承,如下例所示:

var parent = $rootScope;
var child = parent.$new();

parent.salutation = "Hello";
child.name = "World";
expect(child.salutation).toEqual('Hello');

child.salutation = "Welcome";
expect(child.salutation).toEqual('Welcome');
expect(parent.salutation).toEqual('Hello');

https://docs.angularjs.org/api/ng/type/$rootScope.Scope

关于javascript - 定义永久$scope变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27404682/

相关文章:

javascript - 如何在 TypeScript 2 中转换为数组?

javascript - 为什么 JavaScript Promise 无法在使用 Ionic 框架的 Android 4.4 上运行?

angularjs - 如何创建一个 npm 脚本来运行多个命令来运行一些测试?

angularjs - 如何设置ui bootstrap datepicker的日期值

javascript - 正则表达式排除美元符号和数字中的点

c# - 如何使用 jquery 从第一个列表框中选择来填充第二个列表框?

javascript - 如何在angularjs中使用服务在多个 Controller 之间共享数据?

angularjs - 从 AngularJS 外部调用工厂

jquery - AngularJS:$timeout CSS 修复程序不会在页面加载时运行

javascript - 在 NW.JS 下获取 OSX 中任何类型的唯一标识符