【问题标题】:Angular route when() without mapping to controller or template角度路由 when() 没有映射到控制器或模板
【发布时间】:2013-11-24 21:47:03
【问题描述】:

可以在不映射到任何控制器或模板的情况下使用when()吗?

这就是我配置路线的方式:

app.config(function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);
  $routeProvider
    .when('/presentations/:id', {});
});

我需要在我的控制器中使用 routeParams:

app.controller('PresentationController', function($scope, $routeParams) {
    console.log($routeParams);
});

这不起作用。我不需要 ngView 但我添加了它以防万一。我的控制器已经加载了 ng-controller 指令。

【问题讨论】:

    标签: javascript angularjs routes


    【解决方案1】:

    在这种情况下,必须持续关注$routeParams.id 的变化:http://plnkr.co/edit/x2cPxVWPqVePDule1aOk?p=preview

    $scope.$watch(function () { return $routeParams.id; }, function (newVal) {
      if (typeof newVal === 'undefined') return;
      $scope.id = newVal;
    })
    

    此外,模板中必须有ng-view

    【讨论】:

    • 非常感谢:)。有了那个 $watch 我可以跟踪 url 的变化,效果很好。但是我还有另一个问题,当页面第一次加载时,当我的控制器被加载时 $routeParams 是未定义的,我可以在 html 中引用它并且它可以工作但不能在控制器中。再次感谢您的帮助。
    • @PedroGarcía 为什么需要引用它?你能从我的演示中创建一个更新的例子吗?
    • 我找不到如何更改 plunker 中的默认 url。但是我在 js 文件中添加了一些 cmets 来解释问题出在哪里。 plnkr.co/edit/raDtomFubQ56w6oiBvZT?p=preview
    • @PedroGarcía 您应该$watch 内完成所有工作(例如加载内容)。只有$watcher 会随着$routeParams.id 的变化而反复执行,控制器的其余部分不会。另外,第一次,$routeParams.id 可能没有设置,因为控制器和路由器的执行顺序没有确定。或者,您可以使用$routeProvider 中的一条路由,并将整个应用程序的模板呈现在ng-view 中。这将在路由更改时一遍又一遍地加载控制器(和模板),包括第一次。
    • 这说明了很多!我将选择最后一个选项并遵循有角度的方式。谢谢:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多