0

{{ username }}ページ内リンクを使用してナビゲートしているときに変数 (以下の例) が更新されないのはなぜですか? 変数は最初のページ読み込み (匿名に等しい) でのみ設定され、それ以上更新されません。なぜですか? コード i プレーンでシンプル ( 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

常に'ExampleCtrl'コントローラーを使用しているため、一度しか読み取っていません$routeParams$routeParamsオブジェクトは、コントローラーが作成される 1 回だけ作成されます。動的に更新されません。そのため、ルートが say/macadamiaからに変更されたとしても/macadamia123$routeParamsオブジェクトは/macadamiaルート用にコントローラーが作成されたときと同じままです (したがって、$routeParams.usernameは依然として に等しい'/macadamia')。もう一度読み取るには、コントローラーをリロードする必要があります$routeParams

オブジェクトを長い間動的にしたかったの$routeParamsですが、残念ながらAngular$routeProviderはそのようには機能しません。

于 2013-10-24T02:15:21.550 に答える
1

ngViewまず、ルーティングを有効にするディレクティブが必要だと思います。次に、ExampleCtrl一度だけ作成され$scope.username、その時点での現在の値に設定されます。 $routeParams.usernameは単純な文字列ですが、設定$scope.username = '' することもできますが、オブジェクトをスコープに保存し、プロパティ(SAMPLE)$routeParamsにバインドすることはできます。また、html5 を無効にしたか、jsbin では機能しないと思います。username

<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 に答える