gpt4 book ai didi

angularjs - 带有 typescript 的angular-ui-router嵌套命名 View

转载 作者:搜寻专家 更新时间:2023-10-30 21:02:02 25 4
gpt4 key购买 nike

嗨,我是 typescript 的新手,对 angular 的经验很少。我一直在尝试使用 typescript 获得一个非常常见的 angular-ui-router 设置,但我无法弄清楚我缺少什么。我有两个嵌套的命名 View ,它们似乎根本无法加载。

app/app.ts

module myModule{
class MyConfig {
constructor( private $stateProvider:ng.ui.IStateProvider,
private $urlRouterProvider:angular.ui.IUrlRouterProvider ) {
this.init();
}

private init():void {
this.$stateProvider.state( 'home',
{
abstract:true,
template: '<main></main>',
url: '/'
}).state('home.main',
{
views: {
'lhp@home': { template: '<lhp></lhp>' },
'rhs@home': { template: '<rhs></rhs>' }
},
url: '/main',
});

this.$urlRouterProvider.otherwise('/main');
}
}

let myApp = angular.module( 'myModule', ['ui.router'] );
myApp.config(['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) => {
return new MyConfig($stateProvider, $urlRouterProvider);
}]);

主要指令是一个简单的 div,它是两个命名 View 的容器

ma​​in.html/main.controller.ts

module app.Controllers {
export class MainController {
constructor( private $log:ng.ILogService ) {
this.Init();
}

private Init() {
this.$log.info('Main Controller');
}

}

angular.module('myModule').controller( 'mainController', ['$log', MainController] );
}

app/components/main.html

<div>
<div id="wrap">
<div id="left_col" ui-view="lhp"></div>
<div id="right_col" ui-view="rhs"></div>
</div>
</div>

app/components/main.directive.ts

module app.Directives {
'use strict';
export class MainDirective implements ng.IDirective {
public templateUrl:string = 'components/main.html';
public restrict:string = 'E';
public controller:string = 'mainController';
public scope = {};

constructor(private $log:ng.ILogService) {
this.$log.info('main directive');
}

public static Factory() {
return (log:ng.ILogService) => {
return new MainDirective(log);
};
}
}

angular.module('myModule').directive('main', ['$log', app.Directives.MainDirective.Factory()]);
}

app/components/lhp.controller.ts

module app.Controllers {
export class LhpController {
constructor( private $log:ng.ILogService ) {
this.Init();
}

private Init() {
this.$log.info('LHP Controller');
}
}

angular.module('myModule').controller( 'lhpController', ['$log', LhpController] );
}

app/components/lhp.html

<div style="width: inherit">
THIS IS A TEST
</div>

app/components/lhp.directive.ts

module app.Directives {
'use strict';
export class LhpDirective implements ng.IDirective {
public templateUrl:string = 'components/lhp.html';
public restrict:string = 'E';
public controller:string = 'lhpController';
public controllerAs:string = 'lctrl';
public scope = {};

constructor(private $log:ng.ILogService) {
this.$log.info('lhp directive');
}

public static Factory() {
return (log:ng.ILogService) => {
return new LhpDirective(log);
};
}
}

angular.module('myModule').directive('lhp', ['$log', app.Directives.LhpDirective.Factory()]);
}

rhs View 的设置与 lhp 完全相同。我已经确认 rhs 和 lhp 指令都可以正常工作,方法是使 home 状态成为非抽象状态并将它们加载为模板。两者都正确呈现。当我将家庭状态抽象化时,就是我遇到问题的时候。主 Controller 更不用说 html 根本不加载。 typescript 和抽象 View 有问题吗?有没有人遇到过 typescript 和嵌套命名 View 的类似问题?我在互联网上搜索了类似的例子,但找不到任何相关的东西。我发现的最接近的例子是:How can I add ui-router stateProvider configuration to my application with Typescript?它显示了抽象 View 应该可以使用 typescript ,但示例没有填写详细信息。我是否遗漏了嵌套命名 View 与 typescript 一起使用的内容?

如有任何帮助,我们将不胜感激。

最佳答案

我的同事发现了这个问题。这是一个 super 简单的修复。这个问题是由于我的抽象 View 中有一个 url 字段引起的:

private init():void {
this.$stateProvider.state( 'home',
{
abstract:true,
template: '<main></main>'
}).state('home.main',
{
views: {
'lhp@home': { template: '<lhp></lhp>' },
'rhs@home': { template: '<rhs></rhs>' }
},
url: '/main',
});

this.$urlRouterProvider.otherwise('/main');
}

关于angularjs - 带有 typescript 的angular-ui-router嵌套命名 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com