0

あるイベントで動的に変化する入力フィールドがあります。

<input name="selectedId" id="selectedId" ng-model="selectedId" type="hidden" on-change="setUrl">

ここで、ページが変更されたときに、入力フィールドに存在するその ID にページをリダイレクトしたいと考えています。

私のコントローラー

var app = angular.module("myApp", []).
  config(function($routeProvider, $locationProvider) {
    $routeProvider.
      when("/a1", { templateUrl: "partials/page1.html"}).
      when("/a2", { templateUrl: "partials/page2.html"}).
      otherwise( { redirectTo: "/a1" });
  });
app.controller("MainCtrl", function($scope, $location) {  
  $scope.setUrl=function($scope){
    if ($scope.selectedId) {
      alert($scope.selectedId);
    }
    else{
     alert("Out of scope"); 
    }
    //$location.path($scope.selectedId);
  };

ここでは、入力フィールドの値をスコープに入れることができません。setUrl()URLをリダイレクトできるようにトリガーすることさえできません。

私は AngularJS を初めて使用するので、概念を理解する必要があります。

4

2 に答える 2

3
  1. を使用してon-changeいます。AngularJS にはngChangeディレクティブがあります。これを使って。
  2. ngChange を使用したら、 にも置き換えsetUrlますsetUrl()
  3. setUrl次に、関数シグネチャから $scope パラメータを削除します。$scope は の内部で定義されているMainCtrlため、その中で定義されているすべての関数で暗黙的に使用できます。渡す必要はありません。
  4. 隠し入力を使用してidどこかから新しいものを受け取り、それをsetUrl機能に渡すだけです。その隠し入力は必要ありません。AngularJS 共有サービスまたはイベント ブロードキャストの使用を検討するか、$scope.$watch を使用してください。
于 2013-06-18T10:05:00.250 に答える
1

あなたの回避策の1つは

入力モデルにウォッチを登録し、そのウォッチ関数内の場所を変更します

app.controller("MainCtrl", function($scope, $location) {  
 $scope.$watch('selectedId',function(newvalue,oldvalue){
  $location.path(newvalue);
 }
  };

<input name="selectedId" id="selectedId" ng-model="selectedId" type="hidden" >
于 2013-06-18T10:04:07.660 に答える