相关疑难解决方法(0)

重新打开并向已经引导的应用程序添加依赖项

有没有办法为已经引导的角度模块注入延迟依赖?这就是我的意思:

假设我有一个站点范围的角度应用程序,定义为:

// in app.js
var App = angular.module("App", []);
Run Code Online (Sandbox Code Playgroud)

在每一页:

<html ng-app="App">
Run Code Online (Sandbox Code Playgroud)

稍后,我重新打开应用程序,根据当前页面的需要添加逻辑:

// in reports.js
var App = angular.module("App")
App.controller("ReportsController", ['$scope', function($scope) {
  // .. reports controller code
}])
Run Code Online (Sandbox Code Playgroud)

现在,说是逻辑的那些点播位中的一个还需要自己的依赖关系(如ngTouch,ngAnimate,ngResource,等).如何将它们附加到基础应用程序?这似乎不起作用:

// in reports.js
var App = angular.module("App", ['ui.event', 'ngResource']); // <-- raise error when App was already bootstrapped
Run Code Online (Sandbox Code Playgroud)

我意识到我可以事先做好一切,即 -

// in app.js
var App = angular.module("App", ['ui.event', 'ngResource', 'ngAnimate', ...]);
Run Code Online (Sandbox Code Playgroud)

或者自己定义每个模块,然后将所有内容注入主应用程序(有关更多信息,请参阅此处):

// in reports.js
angular.module("Reports", ['ui.event', 'ngResource'])
.controller("ReportsController", ['$scope', …
Run Code Online (Sandbox Code Playgroud)

bootstrapping dependency-injection angularjs

89
推荐指数
3
解决办法
2万
查看次数

AngularJS中的可选依赖项

我正在尝试在AngularJS中实现一个跨多个页面使用的控制器.它利用了一些服务.其中一些是在所有页面上加载的,有些是 - 不是.我的意思是它在不同的文件中定义,并且这些文件是独立加载的.但如果我不在所有页面上加载这些服务,我会收到错误:

Error: Unknown provider: firstOtionalServiceProvider <- firstOtionalService
Run Code Online (Sandbox Code Playgroud)

所以,我需要在所有页面上加载脚本.我可以在Angular中将依赖声明为可选的吗?例如:

myApp.controller('MyController', ['$scope', 'firstRequiredService', 'secondRequiredService', 'optional:firstOptionalService', 'optional:secondOptionalService', function($scope, firstRequiredService, secondRequiredService, firstOptionalService, secondOptionalSerivce){

    // No need to check, as firstRequiredService must not be null
    firstRequiredService.alwaysDefined();

    // If the dependency is not resolved i want Angular to set null as argument and check
    if (firstOptionalService) {
        firstOptionalService.mayBeUndefinedSoCheckNull();
    }

}]);
Run Code Online (Sandbox Code Playgroud)

javascript dependency-injection optional-parameters angularjs

51
推荐指数
5
解决办法
2万
查看次数

仅在需要时动态注入模块

我正在将Require.js与Angular.js结合使用.

某些控制器需要巨大的外部依赖性,而其他控制器则不需要,例如,FirstController需要Angular UI Codemirror.这是额外的135 kb,至少:

require([
  "angular",
  "angular.ui.codemirror" // requires codemirror itself
], function(angular) {
  angular.module("app", [ ..., "ui.codemirror" ]).controller("FirstController", [ ... ]);
});
Run Code Online (Sandbox Code Playgroud)

每次我的页面加载时我都不想要包含指令和Codemirror lib,只是为了让Angular满意.
这就是为什么我现在只在路线被击中时加载控制器,就像这里所做的那样.

但是,当我需要类似的东西时

define([
  "app",
  "angular.ui.codemirror"
], function(app) {
  // ui-codemirror directive MUST be available to the view of this controller as of now
  app.lazy.controller("FirstController", [
    "$scope",
    function($scope) {
      // ...
    }
  ]);
});
Run Code Online (Sandbox Code Playgroud)

如何告诉Angular ui.codemirror在app模块中注入模块(或任何其他模块)?
我不在乎它是否是一种完成此操作的hackish方式,除非它涉及修改外部依赖项的代码.

如果它有用:我正在运行Angular 1.2.0.

requirejs angularjs

44
推荐指数
2
解决办法
6万
查看次数