【问题标题】:Angularjs, Redirect views from controllerAngularjs,从控制器重定向视图
【发布时间】:2016-10-05 22:05:55
【问题描述】:

我是 angularJS 的新手。我正在使用 angularjs 来实现一个网站。该网站有两个页面。第一个页面列出了所有项目,如果用户点击它,它将重定向到详细信息页面。

我的路线配置如下:

var app = angular.module('myApp', ["ngRoute"]);
app.config(function($routeProvider) {
$routeProvider
    .when("/list", {
        templateUrl : "list.html",
        controller  : "listCtrl"
    })
    .when("/detail/:id"){
        templateUrl : "detail.html"
    }
});

在 list.html 中。我使用 ng-repeat 来显示一个项目列表和一个监听器来监听鼠标点击。

<ul class="list-group">
    <li class="list-group-item" ng-repeat="i in items">{{i.name}}
      <a href="#" ng-click="goToEdit($index)">
        <span class="glyphicon glyphicon-pencil"></span>
      </a>
    </li>
</ul>

我想将视图重定向到 ng-click 功能中的详细信息。 我试过$location.path(),但它不起作用。

$scope.goToEdit = function(index){
      console.log($location.path());
      $location.path("/detail/" + index);
      console.log($location.path());
}

这种方式行不通。 即使第二次登录控制台显示 location.path() 已更改为“/detail/id”。

如果我在$location.path(); 之后添加$scope.$apply() 那么我会得到一个动作已经在进行中的错误。

你有什么办法吗???

谢谢

【问题讨论】:

  • 让我看看你的控制器,你在注入什么?
  • 你能在 Plunker 中重现这个问题吗?

标签: angularjs


【解决方案1】:

这可能与使用 href="#" 有关,这在使用基于哈希的路由时不好

你可以自己设置href,不需要控制器功能或ng-click

<a ng-href="#/detail/{{$index}}" >

请注意,您应该为每个项目提供唯一标识符,因为 $index 可能会由于在 ng-repeat 中使用过滤器或从数组中删除数据而发生变化

您也没有为您的第二条路线确定控制器

【讨论】:

  • 如果您使用 HTML5 模式会很痛苦,那么您不需要 # 前缀。我更喜欢 ui.router 的另一个原因
  • @Phil 完全同意 ui-sref 使它更简单并且与 html5Mode 无关
  • 使用 $location.path 也应该与 HTML5 模式无关。我看不出 OP 代码不起作用的原因
  • @Phil 同意,除非散列正在摆脱 ngRoute ...我猜也很容易防止默认
  • 啊,是的,没想到。它可能只是从href 重定向到#
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多