应用程序基础:如何替换默认的动态路由插件?
Foundation for Apps : How to replace the default Dynamic Routing plugin?
Zurb 的 Foundation For Apps 使用 special plugin 直接从每个视图创建路由,它将解析所有 HTML 文件以找到此类降价结构:
---
name: items
url: /items
controller: ItemCtrl
---
将用于生成必要的 angular 动态路由代码,并使用 gulp 编译包含此内容的 routes.js
文件:
var foundationRoutes = [
{
"name":"items",
"url":"/items",
"controller":"ItemCtrl",
"path":"templates/items.html"
}
];
所以我的问题是,如果我想更改我的模板路径或重构我的应用程序,或者我是否需要更高级地使用 angular 的 ui-router 特别是 state.resolve 和 state.views, 有没有办法替换 bui lt-in Dynamic Routing plugin by a $stateProvider
instance without break any of the other F4A's built-in components ?
更新:特殊插件 称为 Front Router,这是 its Github Repository。
这个解决方案解决了我的问题:
by @escapedcat from this github issue
page :
gulpfile.js
: 注释掉FA路由器部分:
// Copies your app's page templates and generates URLs for them
gulp.task('copy-templates', ['copy'], function() {
return gulp.src('./client/templates/**/*.html')
// .pipe(router({
// path: 'build/assets/js/routes.js',
// root: 'client'
// }))
.pipe(gulp.dest('./build/templates'))
;
});
index.html
:移除routes.js
<script src="/assets/js/foundation.js"></script>
<!-- <script src="/assets/js/routes.js"></script> -->
<script src='//maps.googleapis.com/maps/api/js?sensor=false'></script>
<script src="/assets/js/app.js"></script>
app.js
: 注释掉dynamicRouting模块并修改config部分:
angular.module('application', [
...
//foundation
'foundation',
// 'foundation.dynamicRouting',
// 'foundation.dynamicRouting.animations',
...
])
.config(
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('yourstate', {
url: '/yoururl',
templateUrl: 'templates/yourTemplate.html',
controller: 'YourController',
resolve: {
// you can use resolve here, yay!
// promiseFooData: ['Restangular', function(Restangular) {
// return Restangular.one('foo').get();
// }]
}
});
})
.run(run)
;
您之前拥有的每个 route/template 都需要一个 .state
条目。
在此示例中,之前的部分如下所示:
---
name: yourstate
url: /yoururl
controller: YourController
---
注意:动画也可以添加到 state
(我猜是在版本 1.1 之后) :
$stateProvider
.state('home', {
url: '/',
templateUrl: 'templates/home.html',
animation: {
enter: 'slideInDown',
leave: 'fadeOut'
}
});
Zurb 的 Foundation For Apps 使用 special plugin 直接从每个视图创建路由,它将解析所有 HTML 文件以找到此类降价结构:
---
name: items
url: /items
controller: ItemCtrl
---
将用于生成必要的 angular 动态路由代码,并使用 gulp 编译包含此内容的 routes.js
文件:
var foundationRoutes = [
{
"name":"items",
"url":"/items",
"controller":"ItemCtrl",
"path":"templates/items.html"
}
];
所以我的问题是,如果我想更改我的模板路径或重构我的应用程序,或者我是否需要更高级地使用 angular 的 ui-router 特别是 state.resolve 和 state.views, 有没有办法替换 bui lt-in Dynamic Routing plugin by a $stateProvider
instance without break any of the other F4A's built-in components ?
更新:特殊插件 称为 Front Router,这是 its Github Repository。
这个解决方案解决了我的问题:
by @escapedcat from this github issue page :
gulpfile.js
: 注释掉FA路由器部分:
// Copies your app's page templates and generates URLs for them
gulp.task('copy-templates', ['copy'], function() {
return gulp.src('./client/templates/**/*.html')
// .pipe(router({
// path: 'build/assets/js/routes.js',
// root: 'client'
// }))
.pipe(gulp.dest('./build/templates'))
;
});
index.html
:移除routes.js
<script src="/assets/js/foundation.js"></script>
<!-- <script src="/assets/js/routes.js"></script> -->
<script src='//maps.googleapis.com/maps/api/js?sensor=false'></script>
<script src="/assets/js/app.js"></script>
app.js
: 注释掉dynamicRouting模块并修改config部分:
angular.module('application', [
...
//foundation
'foundation',
// 'foundation.dynamicRouting',
// 'foundation.dynamicRouting.animations',
...
])
.config(
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('yourstate', {
url: '/yoururl',
templateUrl: 'templates/yourTemplate.html',
controller: 'YourController',
resolve: {
// you can use resolve here, yay!
// promiseFooData: ['Restangular', function(Restangular) {
// return Restangular.one('foo').get();
// }]
}
});
})
.run(run)
;
您之前拥有的每个 route/template 都需要一个 .state
条目。
在此示例中,之前的部分如下所示:
---
name: yourstate
url: /yoururl
controller: YourController
---
注意:动画也可以添加到 state
(我猜是在版本 1.1 之后) :
$stateProvider
.state('home', {
url: '/',
templateUrl: 'templates/home.html',
animation: {
enter: 'slideInDown',
leave: 'fadeOut'
}
});