【问题标题】:angular2 new router will not load 2 components (head & content) simultaneously on page loadangular2 新路由器不会在页面加载时同时加载 2 个组件(头部和内容)
【发布时间】:2016-01-11 20:17:48
【问题描述】:

我的 Angular2 beta.0 测试应用有一个在页面加载时出现的 HeaderFooter 应用。在页眉和页脚之间是内容部分。第一个问题:我希望内容部分在与 HeaderFooter 组件相同的页面加载事件中与 Home 组件一起加载。经过大量研究和颠簸,它仍然没有显示加载时的两个组件。第二个问题:我可以通过单击标题中的链接来显示测试主页内容,并将其路由到另一个测试页面。它不能可靠地向后路由,浏览器的后退和前进按钮也不能可靠地路由,即 2 步是可以的,3 步是不行的。以下是相关代码:

index.html

<div>
  <residence-app><h1>Loading . . .</h1></residence-app>
</div>

boot.ts - 这应该会在没有单独组件引导的情况下引导所有组件。当我在每个组件中放置引导程序时,我会收到有关选择器的控制台错误,但它们对我没有任何意义。

import { bootstrap }    from 'angular2/platform/browser';
import { HeaderFooter } from './app';
import { RouteConfig, Router, ROUTER_PROVIDERS, LocationStrategy, HashLocationStrategy } from 'angular2/router';
bootstrap( HeaderFooter, [ ROUTER_PROVIDERS ] );

app.ts

//various imports
@Component({
  selector: 'residence-app',
  templateUrl: "angular2-oPost/src/components/navigation/headerFooter.html",
  styleUrls: [ "angular2-oPost/src/commonStyles/headerFooter.css" ],
  directives: [ ROUTER_DIRECTIVES, Home, PostApartment4Rent ]
@RouteConfig( [
  new Route({ path: "/home", name: "Home", component: Home, useAsDefault: true }),
  new Route({ path: "/postApartment4Rent ",  name: "PostApartment4Rent", component: PostApartment4Rent })
] )
export class HeaderFooter { }

headerFooter.html

<header>
<!-- several divs-->
<a [routerLink]="['../Home']">Home</a>
<a [routerLink]="['../PostApartment4Rent']">Rent Apartment in hF</a>
</header> 
<div class="partialPage">
  <router-outlet></router-outlet>
</div>
<footer>
  <!-- several divs-->
</footer>

home.ts

@Component({
  selector : "home",
  styleUrls: [ "angular2-oPost/src/commonStyles/headerFooter.css" ],
  template: `
  <main>
    <h1>Home page map</h1>
  </main>
  `,
  directives: [ RouterLink ]
})
export class Home { }

postApartment4Rent.ts - 与 home.ts 相同,除了 @Component 中的选择器、h1 文本和 class 语句

selector: "postApartment4Rent",

export class PostApartment4Rent { }

【问题讨论】:

  • 不要在routerLink中使用"../Home",它需要路由定义的名称new Route({ path: "/home", name: "Home"在这种情况下只是Home
  • 您将直接引导至页眉,引导至包含页眉和页脚的app 组件,以便您可以同时看到两者。
  • 兰利,谢谢。我在 routerLinks 中将“../Home”更改为“Home”。一切都一样——行为没有改变。这似乎很奇怪,因为一种方式是调用文件层次结构,另一种是调用组件,但任何一种方式都有效。关于第二个想法 - boot.ts 显示它从文件 app.ts 引导组件 HeaderFooter HeaderFooter 在页面加载时显示页眉和页脚。我的问题是主页组件在页面加载时没有显示在页眉和页脚之间。我从 headerFooter.html 中包含路由器插座的 div 中只得到一个空白
  • 你是这样写的吗?:&lt;a [routerLink]="['Home']"&gt;Home&lt;/a&gt;控制台有错误吗?
  • 是的,它就是这样写的。没有控制台错误,无论其写入方式 - 有或没有 ../

标签: javascript angular angular2-routing


【解决方案1】:

通过阅读和尝试更多教程,我将boot.ts 中的最后一行更改为:

bootstrap( HeaderFooter, [ ROUTER_PROVIDERS ] );

到:

bootstrap( HeaderFooter, [ ROUTER_PROVIDERS, provide(LocationStrategy, 
    {useClass: HashLocationStrategy}) ] );

我还必须从 angular2/core 导入提供。

在页面加载时,Home 组件现在同时出现在 HeaderFooter 组件的页眉和页脚之间。页面之间的路由大部分都可以,但使用浏览器后退按钮不可靠。我现在要放手了,因为我读到浏览器的 History API 目前是不稳定的。

【讨论】:

  • 我也遇到了类似的问题。路由器只会加载容器组件,不会加载子组件。在第二次尝试单击路由器链接时再次加载组件。
猜你喜欢
  • 2017-01-24
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2019-01-18
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多