我有一个非常简单的角度ui路径结构:
的index.html:
<div class="container">
<div class="header" ui-view="header"></div>
<div ui-view></div>
</div>
的app.config:
$stateProvider
.state('app', {
abstract: true,
views: {
'header@': {templateUrl: 'views/header.html', controller: 'HeaderCtrl'}
}
})
.state('app.home', {
url: '/',
views: {
'@': {templateUrl: 'views/main.html', controller: 'MainCtrl'}
}
})
但是,上面没有任何内容,控制台中没有错误。当我将console.logs添加到MainCtrl或HeaderCtrl时,它们不会运行。我在another ui-router silent failure question的角度'run'函数中添加了一个调试监听器。
.run(['$rootScope', function($rootScope) {
$rootScope.$on('$stateChangeStart',function(event, toState, toParams, fromState, fromParams){
console.log('$stateChangeStart to '+toState.to+'- fired when the transition begins. toState,toParams : \n',toState, toParams);
});
$rootScope.$on('$stateChangeError',function(event, toState, toParams, fromState, fromParams, error){
console.log('$stateChangeError - fired when an error occurs during transition.');
console.log(arguments);
});
$rootScope.$on('$stateChangeSuccess',function(event, toState, toParams, fromState, fromParams){
console.log('$stateChangeSuccess to '+toState.name+'- fired once the state transition is complete.');
});
// $rootScope.$on('$viewContentLoading',function(event, viewConfig){
// // runs on individual scopes, so putting it in "run" doesn't work.
// console.log('$viewContentLoading - view begins loading - dom not rendered',viewConfig);
// });
$rootScope.$on('$viewContentLoaded',function(event){
console.log('$viewContentLoaded - fired after dom rendered',event);
});
$rootScope.$on('$stateNotFound',function(event, unfoundState, fromState, fromParams){
console.log('$stateNotFound '+unfoundState.to+' - fired when a state cannot be found by its name.');
console.log(unfoundState, fromState, fromParams);
});
然而,唯一触发的是viewContentLoaded(2x)。记录的事件对象使我无法深入了解它所呈现的内容。
我还仔细检查过views /文件夹是否有header.html和main.html,而且views /与index.html处于同一级别(其中头部有<base href="/">
)。< / p>
我完全失去了。我希望如果找不到控制器,我会从angular获得某种提供程序错误,如果.html文件的路径关闭,我会得到404错误。加载的内容似乎是两次触发,每个状态视图一次,但控制器从不运行,HTML永远不会出现。
是的,我甚至在index.html文件中添加了一些静态HTML,以确保我正在查看正确的页面。我是。
答案 0 :(得分:2)
我使用相同的设置创建了working plunker。
据我了解,您使用的是 html5mode ,因此添加了以下内容:
$locationProvider
.html5Mode({enabled:true, requireBase:false})
其余的都一样有效。希望这可以提供一些见解......一些不同的看法......
答案 1 :(得分:0)
在其中一个位置放置断点以帮助查找错误:
UrlMatcher.prototype.exec = function
if (otherwise) check(otherwise);