Angularjs 设置初始$rootScope默认值don';好像不行

Angularjs 设置初始$rootScope默认值don';好像不行,angularjs,extend,rootscope,Angularjs,Extend,Rootscope,我希望有几个与UI相关的全局变量(即打开菜单状态)。我决定把它们放在$rootScope中,这样它们总是可以访问的 这是我写的代码: (function (angular) { angular .module("App", []) .run(["$rootScope", function ($rootScope) { angular.extend($rootScope, { ui: {

我希望有几个与UI相关的全局变量(即打开菜单状态)。我决定把它们放在
$rootScope
中,这样它们总是可以访问的

这是我写的代码:

(function (angular) {

    angular
        .module("App", [])
        .run(["$rootScope", function ($rootScope) {
            angular.extend($rootScope, {
                ui: {
                    menu: false,
                    ...
                }
            });
        }]);

})(angular);
我特意使用了
angular.extend
,以确保保留对同一对象的连续操作。我认为它也比一个接一个地向任何对象添加多个属性更干净和安全

问题 不过,上面的代码什么都不做。当我运行应用程序并通过调用检查根作用域时:

$("body").scope().$root.ui
我得到了
未定义的
,直到
ui
中的某些属性被应用程序上的
ng click
指令操纵。只有这样我的
ui
才能获得引用。。。但它仍然不是我在
run()
函数中定义的对象,而是根据表达式生成的
ng click
指令生成的角度生成对象属性

我做错了什么?

已解决-模块被覆盖 我自己设法解决了。上面问题中包含的代码不足以显示应用程序中的实际问题。问题是我加载模块需求和文件排序的方式

我正在按以下顺序加载文件:

app.js
routing.js
service.something.js
...
filter.something.js
...
所以我想在后续文件中将模块需求添加到我的应用程序模块中(使ti真正模块化)。这将使包含或排除特定文件变得简单,而不会出现任何运行时错误。它还允许在应用程序运行时动态加载其他文件

我的代码的问题是,我在后续文件中重写了我的原始模块。当我将所有模块需求添加到
app.js
中时,一切都开始工作

可能的解决办法 我可以看出,我不是唯一一个喜欢这种功能的人。Lasy模块要求加载可根据

它所做的是创建一个新的喷油器功能

instanceInjector.loadNewModules = function (mods) {
    forEach(loadModules(mods), function(fn) { instanceInjector.invoke(fn || noop); });
};
随后可由各个模块使用,通过执行以下操作将其自身作为需求添加到主应用程序模块:

$injector.loadNewModules(["Module1", "Module2", ...]);
虽然(我的意见)如果在
模块上有一个名为
requires()
的附加函数,则会更好,因此可以这样做:

angular.module("MainModule").requires(["AdditionalModule", "OtherModule", ...]);

我认为这将使它更加简洁、易于使用和理解。

JQLite没有;不支持选择器。我打赌那是你的问题。另外,您有没有考虑过使用Batarang?您有没有理由不想使用angular服务而不是rootscope来处理此类值?作为一个单例,值将在控制器/指令等之间持久化。@MikeCheel:在Angular之前,我不想使用完整的jQuery,所以它使用它,这是可行的…@Layric:我正在考虑为此类数据(状态、常量等)创建一个
全局
服务但我不知道如何在没有任何附加代码的情况下绑定到标记中的这些值?使用
$rootScope
al-lmy
ng单击
ng绑定
ng-?
工作。我不知道如何使用全局服务来实现相同的功能?@Robert无意检查!