【发布时间】:2014-08-18 21:11:11
【问题描述】:
当点击一个链接时,我可以将数据传递到另一个页面:
<div ng-repeat="app in apps | filter:{Name: searchText}" class="slide">
<a href="#/app/{{app.Name}}">{{app.Name}} {{app.Version}}</a>
</div>
当新页面出现时,我看到了应用的名称:
这是显示名称的标记:
<p>{{appName}}</p>
但是,如果我想传递 ID,像这样:
<div ng-repeat="app in apps | filter:{Name: searchText}" class="slide">
<a href="#/app/{{app.Id}}">{{app.Name}} {{app.Version}}</a>
</div>
这行不通。当我单击 ID 时,浏览器中没有任何反应。 F12 工具控制台窗口中没有错误。 Fiddler 没有显示任何活动。我认为这是因为 ID 中有一个斜线(这是 RavenDB 约定)。这是我将鼠标悬停在链接上时看到的内容:
注意最后一个斜线。我认为这是在搞砸。
所以我尝试使用stackoverflow solution 来逃避斜线。现在,当我悬停时,我看到了这个:
我以为这样就可以了,但我又回到了同样的行为:当我点击它时没有任何反应。 Fiddler 中也没有。我错过了什么? (如果我更改标记以再次传递 Name 属性,一切正常。所以接线很好。)
编辑
我刚刚意识到,并不是什么都没有发生。我的路线提供商正在启动并带我回到我已经在同一页面上:
$routeProvider.otherwise({ redirectTo: '/apps' });
这是整个路由配置:
app.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/apps', { templateUrl: 'partials/apps.html', controller: 'appsController' });
$routeProvider.when('/servers', { templateUrl: 'partials/servers.html', controller: 'serversController' });
$routeProvider.when('/app/:appId?', { templateUrl: 'partials/app.html', controller: 'appController' });
$routeProvider.otherwise({ redirectTo: '/apps' });
}]);
解决方法
设置这样的路线可以让我点击正确的页面。唯一的问题是我需要在 ID 的数字部分(在接收页面上)前加上文字“applications/”。我想我可以做到。
$routeProvider.when('/app/applications/:appId?', { templateUrl: 'partials/app.html', controller: 'appController' });
为了完整起见,这是我在接收控制器中必须做的:
.controller('appController', function ($scope, $routeParams) {
$scope.appId = "applications/" + $routeParams.appId;
})
【问题讨论】:
-
也许您只需要定义另一个与带有应用程序 ID 的 URL 匹配的路由......除非您向我们展示您调用的“$routeProvider.when()”语句,否则很难说/在您的应用中声明;)
-
我刚刚将其添加到我的帖子中。我也使用了你的解决方法。如果没有人有一种实际的方法来传递带有斜线的整个字符串,我很乐意接受你的回答。谢谢!
标签: angularjs