我有2页(我不会使用angular
' s routing
- 此约束条件。)
在其中一个中,我想在本演示中使用指令ui-grid
:
var app = angular.module('myApp', ['ui.grid']);
app.controller('mainCtrl', function($scope) {
$scope.myData = [
{
"firstName": "Cox",
"lastName": "Carney",
"company": "Enormo",
"employed": true
},
{
"firstName": "Lorraine",
"lastName": "Wise",
"company": "Comveyer",
"employed": false
},
{
"firstName": "Nancy",
"lastName": "Waters",
"company": "Fuelton",
"employed": false
}
];
});

<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.js"></script>
<script src="http://ui-grid.info/release/ui-grid-unstable.js"></script>
<link rel="stylesheet" href="http://ui-grid.info/release/ui-grid-unstable.css" type="text/css">
<div ng-app="myApp">
<div ng-controller="mainCtrl">
<div id="grid1" ui-grid="{ data: myData }" class="grid"></div>
</div>
</div>
&#13;
我的问题是,是否有办法在任何情况下都不会向应用程序注入ui-grid
依赖项,但仅限于我需要时。
类似的东西:
app.controller('mainCtrl', function($scope) {
app.$inject('ui-grid');
});
更新
我试着这样做:
var ui_grid = $injector.get('ui-grid');
但我有一个错误:
未知提供者:ui-gridProvider&lt; - ui-grid
http://errors.angularjs.org/1.2.26/$injector/unpr?p0=ui-gridProvider%20%3C-%20ui-grid
答案 0 :(得分:5)
Core Angular API不提供此功能。 ocLazyLoad是Angular中延迟加载模块和组件的流行库。
您可以在其页面上找到更多信息: https://oclazyload.readme.io
或GitHub存储库: https://github.com/ocombe/ocLazyLoad
答案 1 :(得分:2)
Core Angular API提供此功能,只需使用module @ Properties部分@ https://code.angularjs.org/1.4.7/docs/api/ng/type/angular.Module
的'requires'属性var app = angular.module('myApp');
//Page 1 JS
//change below statement as per requirement in different pages
app.requires = ['ui.grid'];
app.controller('mainCtrl1', function($scope) {
}
//Page 2 JS
app.requires = ['ngResource', 'ui.bootstrap', 'ui.calendar'];
app.controller('mainCtrl2', function($scope) {
}
ocLazyLoad也是很好的解决方案,但我认为“需要”属性可以毫不费力地解决您的问题。
答案 2 :(得分:1)
在我的项目中,我使用angular.bootstrap()
动态引导角度模块。我有几个页面有不同的模块集。
示例:强>
var app = angular.module('demo', [])
.controller('WelcomeController', function($scope) {
$scope.greeting = 'Welcome!';
});
angular.bootstrap(document, ['demo']);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="WelcomeController">
{{greeting}}
</div>
答案 3 :(得分:0)
var $http = $injector.get('$http');
用于检索由provider,实例化类型,调用方法和加载模块定义的对象实例。
app.controller('mainCtrl', function($scope, $injector) {
$scope.myData = [];
if($scope.loadGrid) {
var ui_grid = $injector.get('ui-grid');
ui_grid.load($scope.myData); //`.load` is just a guess, obviously read your docs
}
});
完成您的用例:
book.Categories
有关详细信息,请参阅:
答案 4 :(得分:0)
在angularJS for injectioning模块中,你应该按照你的模块名称注入它。
但是你几乎没有步骤可以使用它:
使用此方式npm
或bower
安装,如下所示:
npm install angular-ui-grid
bower install angular-ui-grid
然后在index.html中添加<script>
:
<link rel="stylesheet" type="text/css"href="/bower_components/angularui-grid/ui-grid.css" />
<script src="/bower_components/angular-ui-grid/ui-grid.js"></script>
npm
,则应将源路径更改为/node_modules/
。完成此步骤后,您可以访问模块,如下所示:
angular.module('my.module', ['ui.grid'])
。