- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从一条子路线导航到另一条路线,但我不断收到 Route not found
。我的主要问题:如何在 subview 之间导航?
下面是代码,我还会有其他问题。
应用模式- View 应用程序类别:
export class App {
configureRouter(config, router) {
config.title = 'My Site';
config.map([
{ route: ['','job-view'], name: 'jobView', moduleId: './job-view', nav: true, title:'Jobs'},
{ route: ['services'], name: 'services', moduleId: './services', nav: true, title:'Services'}
]);
this.router = router;
this.router.refreshNavigation();
}
}
问题2:为什么我们需要保存router
如果始终可以从 aurelia-router
访问它,则位于此处?
应用页面:
<template>
<require from='./nav-bar'></require>
<nav-bar router.bind="router"></nav-bar>
<div class="container">
<router-view></router-view>
</div>
</template>
好的,现在我们已经定义了根页面 View 和导航,让我们定义 job-view
MV.
JobView 类:
export class JobView {
configureRouter(config, router) {
config.map([
{ route: ['','jobs'], name: 'jobs', moduleId: './jobs', nav: false, title:'Jobs', settings:{icon:'glyphicon glyphicon-align-justify'} },
{ route: ['job/:id'], name: 'job', moduleId: './job', nav: false, title:'Job Details'}
]);
this.router = router; //WHY SAVE THIS?
this.router.refreshNavigation();
}
}
作业查看页面:
<template>
<router-view></router-view>
</template>
现在,这是 subview 。我的假设是发生的路由应该相对于 job-view
。理想情况下,这就是我想要的。
作业类 (为简洁起见,删除了一堆代码):
import {Router} from 'aurelia-router';
@inject(Router)
export class Jobs {
constructor(router) {
this.router = router;
}
toJob(id) {
// this.router.navigateToRoute("job", {id:id}); // ERROR - ROUTE NOT FOUND
this.router.navigate("#/job-view/job/".concat(id)); // THIS WORKS
}
}
Q.3:我都见过 router.navigateToRoute
和router.navigate
引用了,但没有说明何时使用或者有什么区别,并且该文档没有解释。应该使用哪个? Docs
职位页面:jobs.html
的详细信息无关紧要,因此此处不列出它们。
最后,job
查看:
工作类别:与 job.js
没有任何相关内容,所以不列出代码。我最多可以导航回 jobs
,但这在页面下面进行处理。
职位页面:
<!-- a bunch of html //-->
<!-- HOW TO USE ROUTER IN HTML, NOT BELOW URL HREF? //-->
<a href="#/jobs">Print Jobs</a>
<!-- a bunch of html //-->
Q.4:同样,我想路由到相对路径,即使在 HTML 页面中也是如此。上面的方法不起作用,那么我应该使用什么呢?
有一个proposed answer在类似的问题中,但注入(inject) job-view
进入job
并使用 job-view
保存的路由器也不起作用。
顺便说一句,如果我手动导航到 http://localhost:3000/#/job-view/job/3
页面加载正常,因此路由器的情况很清楚。
模组注意事项:在 How to access child router in Aurelia? 上提出了类似的问题但没有找到有效的解决方案。
最佳答案
下面我会尽力一一回答大家的问题。
我将从第二季度开始
Q.2: Why do we need to save router here if it's always accessible from aurelia-router?
因此,在您的应用程序模式- View 应用程序类中,您在 View 中引用路由器属性:<nav-bar router.bind="router"></nav-bar>
,这就是为什么您需要声明该属性才能使用它。在第二个 View 中,您不是,所以您不需要它:-)
该属性(property)router
当您需要在 main.ts/main.js(应用程序的起点)中对路由器执行某些操作时,也会添加此内容。这是因为路由器是第一次配置的,在构造函数中注入(inject)是不起作用的,所以你需要保存这个属性才能在 configureRouter(..)
中获取它。方法(注:这是beta 1之前的情况,不知道现在是否还在)。
在您的代码中,您需要调用 this.router.refreshNavigation();
这将确保您的路由器更新为有关当前路由位置的新信息。
Q.3: I've seen both router.navigateToRoute and router.navigate referenced, but no indication when to use either or what the difference is, and the document doesn't seen to explain. Which should be used? Docs
方法router.navigate(fragment: string, options?: any)
使用 URL 片段而不是路由名称进行导航,因此例如router.navigate('#/app/child', {...<options - not params od the URL>...})
。该方法必须用于在路由器之间进行绝对导航,以及访问父 URL 等。
如果您仅在当前路由器周围导航,您将始终使用 router.navigateToRoute(route: string, params?: any, options?: any)
。此方法使用路由名称,而不是 URL,我们只是在自定义路由映射中放置一个路由名称(自定义表示当前子路由映射,或关于我们在页面上的 URL 位置的当前主路由)。在这里您可以以更方便的方式传递 URL 参数,如您所见。您可以使用 params 对象,而不是将 URL 与 params 连接起来。
Q.4: Again, I'd like routing to relative, even in the HTML page. The above won't work, so what should I use?
在 Aurelia 中,我们没有使用 href
a
的属性直接标记用于导航。正如布兰登已经回答的那样,您必须使用 route-href
属性,可能没有任何记录,只是出现在论坛和门户网站上。这相当于 router.navigateToRoute(route: string, params?: any, options?: any)
,因此您不能使用它在路由器之间导航,在这种情况下您可以使用自定义属性或仅使用 click.triger="navTo('#/app/child')"
,其中navTo()
方法在您的 View 模型中实现,如下所示:
public navTo(routeName: string) {
// Assuming you are injecting router somewhere in the constructor
this.router.navigateToRoute(routeName);
}
最后是你的主题问题:
Q.1: How navigate between child routes
也许现在您知道答案了,只需使用:router.navigate(fragment: string, options?: any)
带有绝对 URL。
下面的示例自定义属性可以解决此问题:
import {inject} from "aurelia-dependency-injection";
import {Router} from "aurelia-router";
import {customAttribute} from "aurelia-framework";
@customAttribute('nav-href')
@inject(Element, Router)
export class NavHref {
private value: string = '';
constructor(private element: Element, private router: Router) {
let $this = this;
element.addEventListener('click', () => {
if ($this.value === 'back') {
$this.router.navigateBack();
} else {
// expression
$this.router.navigate($this.value);
}
});
}
public valueChanged(newValue: string, oldValue: string) {
this.value = newValue;
}
}
首先,您需要将其导入 HTML,我将文件命名为 nav.href.ts:
<require from="common/nav.href"></require>
然后只需在 HTML 代码中使用它即可:
<a nav-href="#/home/any-location">My link to any location</a>
希望这对你有帮助,干杯:-)
关于Aurelia:如何在子路线之间导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35246901/
我有两种类型的路由 Public 和 Private。 只有用户登录后才能访问所有私有(private)路由: return tokenService.token ? ( <>
我已按照 Laravel 5.5 文档在我们的应用程序上要求、安装和配置 Laravel Passport。我们仅使用密码授予功能,因为我们不打算将其用作社交登录工具。但是,按照所有说明操作后,我在尝
我想设置事件菜单项的样式,为此我需要将当前 url 与路由进行比较。我知道我可以在 javascript 中做到这一点,但我想知道其他人是如何解决这个问题的。 有什么建议么? 伪代码: My Page
我正在尝试在浏览器上以图形方式显示路径/路线以供客户查看。例如,基于 txt 或 XML 文件,包含说明。 4 90 5 90 2 或 F4,L90,F5,L90,F2 相当于
我创建了一个中间件来阻止我的 laravel 应用程序中的某些路由,但不起作用,无法弄清楚我做错了什么,这是我的代码: ps:我使用的是 laravel 5.2 路线: Route::get('sec
我正在使用 Java 工作。给定一个矩阵 NxM,我需要找到通过该数组的所有可能路径。只允许斜向上或斜向下,或向右斜行。 4x4 矩阵示例: 3 5 7 9 2 4 6 8 9 3 7
我是 Marionette 新手,只是找不到上类路线。 我正在使用 Marionette 的 2.4.1 版本,并尝试以最简单的方式进行操作,以便它能够正常工作。 此代码适用于旧版本的 Marione
我是 AngularJS 的新手。我正在尝试从这个网站( https://docs.angularjs.org/tutorial/step_07 )学习 AngularJS。我的代码如下 index.
我在 yandexmapkit-android 项目上工作。图书馆链接是 https://github.com/yandexmobile/yandexmapkit-android 文档非常薄弱,git
我正在阅读有关 Angular 路由的文档并创建了一个简单的测试: const routes: Route[] = [ { path: '', redirectTo: '/home', pat
我正在开发一项服务 (spring-boot),它获取一个 ID 列表,一个一个地从数据库中获取对象,将这些对象聚合成批处理,然后将它们保存在其他地方。目前,聚合后的批量大小约为 50 个对象,大约每
我正在制作一个网站,在用户登录后,用户将被重定向到主页。网站的主页和所有其他页面只能由登录用户访问,但即使在用户登录后(firebase auth),网站的其余部分( protected 路由)仍然无
我有一个惰性模块,我希望在桌面和移动设备上有不同的体验。基本上我想要我的桌面布局如下: Component1 显示一个列表,用户在列表中选择一个项目,component2 将显示详细信息。我创建了名为
我是 Angular 的新手,我正在尝试让我的路由器工作。基本上我在 / 有一个主页,其中有一个到 /courses 的路由器链接,它运行良好,但是当我重新加载 /courses 时(或输入地址in)
完整的 Mojolicious 应用程序有 routes将转储应用程序路由的命令: script/my_app.pl routes 我如何从 Lite 的测试脚本中做同样的事情应用? use Mojo
我有一个 Camel 2.13.1 应用程序,它使用我通过 CXF 组件访问的外部 Web 服务。我使用 Spring XML 路由元素的 startupOrder 属性来确保在我设置为在启动时调用一
我们有一个在 Karaf 2.4.3 和 Camel 2.15.3 上运行的数据处理应用程序。 在这个应用程序中,我们有一堆导入数据的路由。我们有一个管理 View ,其中列出了这些路由以及每条路由的
我正在尝试组合一个应用程序,我可以在其中查询谷歌路线服务,存储结果以建立缓存,然后根据需要呈现路线。 我可以取回方向数据并将其存储在数据库中就好了,这一切都很好,现在当我在 map 上渲染方向时,我的
我根据 Ryan Bates 的 railscast 使用设计登录创建了一个新项目. 它没有注册路线(与我之前制作的项目不同,步骤完全相同) This image显示了两个“rake 路由”命令。顶
我发现 Google Maps API 通过以下方式支持路线: var map; var directionsPanel; var directions; function initialize()
我是一名优秀的程序员,十分优秀!