以下是我在ui-router状态方面的进展:
这是目前为止我使用ui-router状态的情况:
$stateProvider
.state('tools', {
url: '/tools/:tool',
template: '<div ui-view=""></div>',
abstract: true,
onEnter: function ($stateParams, $state, TOOL_TYPES) {
if (TOOL_TYPES.indexOf($stateParams.tool) === -1) {
$state.go('error');
}
}
})
.state('tools.list', {
url: '',
templateUrl: 'app/tools/tools.tpl.html',
controller: 'ToolsController'
})
.state('tools.view', {
url: '/:id/view',
templateUrl: 'app/tools/partials/tool.tpl.html',
controller: 'ToolController'
});
从上面的代码可以看出,父状态有一个 tool
参数,该参数只能在 TOOL_TYPES
数组中。因此,在情况下当 tool
不可用时,我想重定向到错误页面。
实际上,一切都按预期进行,但是我收到了两个错误:
TypeError: Cannot read property '@' of null
TypeError: Cannot read property '@tools' of null
因此,我猜测子状态已被“命中”。是否有可能防止这种情况发生?或者也许还有其他方法可以实现我想要的功能?