0

为什么{{ username }}当我使用页内链接导航时变量(在下面的示例中)没有更新?该变量仅在初始页面加载时设置(等于匿名)并且不再更新,这是为什么呢?我的代码简单明了(http://jsbin.com/OTApeYI/1/):

   <!doctype html>
    <html lang="en" ng-app="examp">
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js">    </script>
    </head>
    <body ng-controller="ExampleCtrl">
    <a href="#">Home</a>, <a href="Admin">Admin</a>

    Your user name is: {{ username }}

    <script>
angular.module('examp', ['examp.controllers']).
  config(function($routeProvider, $locationProvider) {
    $locationProvider.html5Mode(true);
    $routeProvider.when('/:username', {controller: 'ExampleCtrl'});
    $routeProvider.otherwise({redirectTo: '/'});
  });

angular.module('examp.controllers', [])
  .controller('ExampleCtrl', ['$scope', '$routeParams', function($scope, $routeParams) {
    $scope.username = $routeParams.username ? $routeParams.username : "Anonymous";
  }]);
    </script>
    </body>
    </html>
4

2 回答 2

1

首先,我认为您需要该ngView指令来激活路由。其次,ExampleCtrl仅创建一次,并且您$scope.username当时设置为当前值。 $routeParams.username是一个简单的字符串,您也可以设置$scope.username = '' 您可以将$routeParams对象存储在您的范围内并绑定到username属性(SAMPLE)。我还禁用了 html5,或者我认为它不适用于 jsbin。

<div ng-view></div>
<p>Your user name is: {{ username }}</p>
<p>params.username is: {{ params.username }}</p>
<p>eventusername is: {{ eventusername }}</p>
<p>JSON:</p><pre>{{ params|json }}</pre> 

在你的控制器中:

$scope.params = $routeParams;

另一种选择是查找路线更改事件并处理它们:

$scope.$on("$routeChangeStart", function(event, next, current) {
  $scope.eventusername = next.params.username;
});
于 2013-10-24T05:34:00.083 回答
1

因为您一直在使用'ExampleCtrl'控制器,所以您只阅读过$routeParams一次。该$routeParams对象仅在创建控制器时创建一次。它不会动态更新。因此,即使您的路线可能已从 say 更改/macadamia/macadamia123,该$routeParams对象仍与为您的/macadamia路线创建控制器时的对象相同(因此$routeParams.username仍为 equals '/macadamia')。您需要重新加载控制器才能$routeParams再次读取。

$routeParams长期以来,我一直希望对象是动态的,但不幸的是,angular$routeProvider不能那样工作。

于 2013-10-24T02:15:21.550 回答