我是使用ui-router的新手,并且在延迟加载嵌套ui-view时遇到了一些困难。我已经尝试了很多方法,尽管我想我已经接近了,但是我还无法完全正常工作,因此,修复下面共享的插件的任何人都将获得正确的答案。
-首先,require.js引导主应用程序,而index.html包含两个ui视图,一个用于导航,一个用于主要内容部分。主要内容部分包含各种项目组合项(plnkr中的Test1),这些项目项在被选中时被延迟加载(使用ocLazyLoad)到主要内容部分。
-主应用程序模块在其config方法中定义了各种状态,包括根据其ID并基于命名约定加载投资组合项目的状态。
-单击Test1时,将延迟加载其主模块,并且该模块定义其自己的状态,并且Test1具有其自己的index.html和其自己的嵌套ui-view。值得注意的是,我还必须使用该模块的run方法来运行将$ state.go包装在$ timeout中的函数,以使模板内容在最初单击Test1时出现在嵌套的ui视图中。正如我们稍后将看到的那样,这是骇人听闻的,并且无疑不是正确的方法,也可能是问题的根源。我还尝试将$ state.go放到服务中,但没有任何变化,因为我最终遇到了同样的问题。
-最后,这是发生问题的地方。如果从Test1内部单击主导航中的Home,然后再次尝试单击Test1,则以前出现在嵌套ui视图中的模板内容不会出现(显然,因为模块的run函数仅运行一次)。手动单击重新加载状态的链接很容易使其重新出现,但是显然这是不希望的。
TL / DR-主页->单击Test1->工作!->单击主页->单击Test1->中断!
主要应用模块和状态:
(function() {
angular.module('myApp', [
'ui.router',
//'door3.css',
'oc.lazyLoad'
])
.config(function($ocLazyLoadProvider, $stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('root', {
url: '/',
views: {
'nav': {
templateUrl: 'views/static/nav.html'
},
'content': {
templateUrl: 'views/portfolio.html'
}
}
})
.state('root.home', {
url: 'home',
views: {
'content@': {
templateUrl: 'views/portfolio.html'
}
}
})
.state('root.about', {
url: 'about',
views: {
'content@': {
templateUrl: 'views/about.html'
}
}
})
.state('root.portfolio', {
url: ':id',
views: {
'content@': {
// css: function($stateParams) {
// return '/portfolio/' + $stateParams.id + '/css/master.css';
// },
templateUrl: function($stateParams) {
return 'portfolio/' + $stateParams.id + '/index.html';
},
resolve: {
load: function($stateParams, $ocLazyLoad) {
return $ocLazyLoad.load({
files: ['portfolio/' + $stateParams.id + '/js/mainModule.js']
});
}
}
}
}
});
});
})();
延迟加载的Test1主模块和状态:
(function() {
angular.module('testingApp', [{
files: [
'portfolio/testing/controllers/testingCtrl.js'
]
}])
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('root.portfolio.testing', {
url: '/',
views: {
'[email protected]': {
templateUrl: 'portfolio/testing/views/testfile.html',
controller: 'testingCtrl',
controllerAs: 'test'
}
}
})
})
.run(function($state, $timeout) {
$timeout(function() {
$state.go('root.portfolio.testing');
}, 0);
});
})();
我不知道你要实现的目标,但把$state.go
成run
块是一个原因,它的工作在第一时间和任何其他连续的时间。
原因是run
模块加载时模块仅运行一次,模块加载一次。
在添加为依赖项注入时修复此move$state.go
调用testingCtrl
$state
见我固定的矮人。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句