aco*_*der 26 javascript angularjs
将AngularJS应用程序拆分为更小的部分/模块的最佳方法是什么?例如,如果我有博客文章和评论启用,我想我可以将其分解为"帖子"和"评论"(?)等模块(可能不是最好的例子,但想法是拆分应用程序逻辑分成单独的模块,而不是构建一个巨大的单模块应用程序).
我试图在单独的DOM节点中引导两个模块,并相应地在两个模块中使用路由.问题很少:
的index.html
<div class="post"><ng-view></ng-view></div>
<div class="comments"><ng-view></ng-view></div>
Run Code Online (Sandbox Code Playgroud)
javascript.js
angular.module('posts', []).config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/', {
'template': 'Showing all the posts',
'controller': 'postCtrl
})
.when('/post/:id', {
'template': 'Showing post :id',
'controller': 'postCtrl
});
}]);
angular.module('comments', []).config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/post/:id', {
'template': 'Showing post :id comments',
'controller': 'CommentsCtrl'
});
}]);
angular.bootstrap($('.post'), ['posts']);
angular.bootstrap($('.comments'), ['comments']);
Run Code Online (Sandbox Code Playgroud)
小智 21
我会在"视图模块"和这些子模块中划分应用程序.
然后我使用$ routeProvider在视图之间切换.我在每个模块中定义了不同的路由配置.
如果我需要更多的子模块,我用ng-include加载它们.
/* App Module */
angular.module('MyApp', ['MyApp.home', 'MyApp.blog'])
.config( function myAppConfig ( $routeProvider ) {
'use strict';
$routeProvider.otherwise({ redirectTo: '/home' });
});
/* home Module */
angular.module('MyApp.home', [])
.config(['$routeProvider', function config( $routeProvider ) {
$routeProvider.when('/home', {
controller: 'HomeController',
template: '<p>This is my Home</p>'
});
}]);
Run Code Online (Sandbox Code Playgroud)
我在github上创建了一个小存储库来解释这一点.
您可以在子模块中定义路径:
angular.module('app', ['ngRoute', 'app.moduleX'])
.config(function($routeProvider, $locationProvider) {
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomeCtrl'
});
//Handle all exceptions
$routeProvider.otherwise({
redirectTo: '/home'
});
})
angular.module('app.moduleX', []).config(function($routeProvider) {
$routeProvider.when('/settings', {
templateUrl: 'partials/settings.html',
controller: 'SettingsCtrl'
});
})
Run Code Online (Sandbox Code Playgroud)
我们正在对门户应用程序和子应用程序做类似的事情。我们发现了一些事情:
由于只有一个应用程序可以拥有路由,因此应按顺序引导应用程序。所以像这样:
$( function () {
$.when(angular.bootstrap($('.post'), ['posts'])).done( function() {
console.log('POSTS: bootstrapped');
//Manually add the controller to the comments element. (May or may not be
//necessary, but we were doing something that required it to work.)
$('.comments').attr('ng-controller', 'CommentsCtrl');
$.when(angular.bootstrap($('.comments'), ['comments'])).done( function() {
console.log('COMMENTS: bootstrapped');
});
});
});
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
23303 次 |
最近记录: |