为什么ui路由无法从状态2解析状态1
Why ui-route cannot resolve state1 from state2?
我有一个有两个视图(左手菜单和内容(的应用程序,它也有模块。当用户从组合列表中选择模块时,将使用所选的模块名称调用$state.go((,并相应地填充视图。下面的代码示例。
我使用Angular 1.5、ui路由器和typescript。
当我从组合列表中选择一个模块时,应用程序会抛出以下错误。
错误:无法从状态"主"解析"BFTS">
我不知道为什么。
到目前为止,我所做的是克服这个问题:
-
检查params是否会在组合框中正确通过。它运行良好。
-
我在这里查了很多问题和文件。与公认的答案相比,我看不出我的代码有什么不同。
奇怪的是,当加载应用程序时,"主页"状态是活动的,因为我可以在我期望的地方看到"主页模块"answers"主页内容"文本。
控制器,用户可以在其中选择模块。
module qa.gonogo {
"use strict";
export interface IHeaderComponentController {
}
export class HeaderComponentController implements IHeaderComponentController {
public modules = <IGoNoGoModule[]>[
{
name: "BFTS",
default: 1
},
{
name: "Test Execution",
default: 0
},
{
name: "Data Analyzer",
default: 0
},
{
name: "Data Generator",
default: 0
},
{
name: "Build track",
default: 0
},
];
public selectedModule = undefined;
static $inject = ["moveToStateService"];
constructor(
private moveToStateService: IMoveToStateService
) { }
public $onInit = (): void => {
}
public moduleSelected(goNoGoModule: IGoNoGoModule): void {
console.log('selected: ', goNoGoModule);
if (goNoGoModule === null || typeof goNoGoModule === 'undefined') {
throw "Desired state name cannot be empty or null! " + goNoGoModule;
}
this.moveToStateService.moveToState(goNoGoModule.name);
}
}
angular
.module("goNoGo")
.controller("headerComponentController", qa.gonogo.HeaderComponentController);
}
州:
((): void => {
"use strict";
angular
.module("goNoGo")
.config(config);
config.$inject = ["$stateProvider", "$urlRouterProvider"];
function config(
$stateProvider: ng.ui.IStateProvider,
$urlRouterProvider: ng.ui.IUrlRouterProvider
) {
$urlRouterProvider.otherwise("/");
$stateProvider
.state("home",
<ng.ui.IState>{
url: "/",
views: <any>{
"leftHandMenu": <ng.ui.IState>{
template: "home module"
},
"content": <ng.ui.IState>{
template: "home content"
}
}
})
.state("bfts",
<ng.ui.IState>{
url: "/bfts",
views: <any>{
"leftHandMenu": <ng.ui.IState>{
template: "bfts module"
},
"content": <ng.ui.IState>{
template: "bfts content"
}
}
})
}
})();
状态将更改的服务:
module qa.gonogo {
"use strict";
export interface IMoveToStateService {
moveToState(stateName: string): void;
}
class MoveToStateService implements IMoveToStateService {
constructor(
private $state: ng.ui.IStateService ) {
}
moveToState(stateName: string): void {
console.log("state service:", stateName);
this.$state.go(stateName, <any>{});
}
}
factory.$inject = ["$state"];
function factory(
$state: ng.ui.IStateService
) {
return new MoveToStateService($state);
}
angular
.module("goNoGo")
.factory("moveToStateService", factory);
}
正如我在评论中所写的那样-您定义了类似的状态
.state("bfts",
所以
<a ui-sref="BFTS">
将不起作用,因为路由的ui无法识别与该名称匹配的状态。但<a ui-sref="bfts">
会起作用。
相关文章:
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 在UI路由器中以抽象状态填充常见视图
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 带有嵌套状态的Angular ui路由器和后退按钮
- 如何加载嵌套3个状态的UI路由器UI视图模板
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- ui路由器的惰性加载状态
- Angular JS/UI Router:为给定状态禁用指令
- AngularJS UI路由器未进入默认状态
- Angular UI路由器-检查父状态
- 状态更改期间角度UI路由器中的嵌套视图滞后
- angularjs-ui路由器父状态,参数加载在子状态之后
- Angularjs-ui路由器使用不同的参数进入相同的状态
- AngularJS ui路由器状态结构
- Angularjs:ui路由嵌套状态下的绑定不起作用
- 如何将值与$scope绑定,以从定义状态ui路由器的控制器中使用ng模型进行查看
- 防止命中子状态 ui 路由器
- 从服务器加载 html 和控制器并创建动态状态 UI - 路由器
- 如何在vue.js中观察状态/UI的变化