Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 路由器解析可以设置为控制器类的函数吗?_Angularjs - Fatal编程技术网

Angularjs 路由器解析可以设置为控制器类的函数吗?

Angularjs 路由器解析可以设置为控制器类的函数吗?,angularjs,Angularjs,背景 我一直在阅读Todd Montitle的固执己见的风格指南,特别是与路由器解析相关的部分-向下滚动到“Controller.resolve property:”部分: 我一直不喜欢路由器定义中定义了解析逻辑这一事实,所以在理论上我非常喜欢这个解决方案,但在实践中,我不明白这是怎么可能的 托德说: '这使解析依赖项与控制器和路由器位于同一文件中,不受逻辑影响' 因此,我的理解是——使用他的例子——将控制器逻辑放在一个文件中,其中的参数sake controllers.js定义为 app.mo

背景

我一直在阅读Todd Montitle的固执己见的风格指南,特别是与路由器解析相关的部分-向下滚动到“Controller.resolve property:”部分:

我一直不喜欢路由器定义中定义了解析逻辑这一事实,所以在理论上我非常喜欢这个解决方案,但在实践中,我不明白这是怎么可能的

托德说:

'这使解析依赖项与控制器和路由器位于同一文件中,不受逻辑影响'

因此,我的理解是——使用他的例子——将控制器逻辑放在一个文件中,其中的参数sake controllers.js定义为

app.module('myapp')
   .controller('MainCtrl', MainCtrl);

function MainCtrl() {
    ///some controller logic here
}

MainCtrl.resolve = {
    someStuff: function() {
        //resolve something here
    }
}
然后在另一个文件routes.js中

app.module('myapp')
   .config(config);

function config ($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: 'views/main.html',
            controllerAs: 'vm',
            controller: 'MainCtrl'
            resolve: MainCtrl.resolve
     });
}
为了防止污染全局范围,我假设这两个文件逻辑都在一个生命周期内。因此,MainCtrl唯一存在的地方是作为angular应用程序中的可注入值。由于您无法将控制器注入配置,因此它无法知道MainCtrl是什么,更不用说访问其解析方法了

问题:


还是我在实现这一点的方式上遗漏了什么?

查看IIFE范围界定部分:

为了避免传递到Angular中的函数声明污染全局范围,请确保构建任务将连接的文件包装在IIFE中

我们在编译时执行此操作,因此没有任何东西是全局的。我们只需将整个模块封装在一个IIFE中,就这样:


我不建议将每个文件包装到IIFE中,因为这只是运行时不必要的函数调用,例如,如果您有1000个文件。每个模块一次生命也是一个很好的方法:

ahhh,我对javascript/angular非常陌生,但在我提交问题后,我突然想到了这一点。多谢托德。我已经准备好了大口大口地来处理这件事。我将连接并包装每个模块,然后将整个应用程序连接到一个build.js文件中供开发人员使用。我是否认为您应该根据此文件进行开发并将其加载到浏览器中以查看/测试更改,而不是src,以确保没有范围问题或全局范围污染?出于同样的原因,您是否也会对该文件进行测试?还是针对您的src进行测试?