2013-06-18 21 views
0

我有一個在某些事件上動態更改的輸入字段。如何使用angularjs跟蹤輸入字段值的動態變化

<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(),因此我可以重定向網址。

我是AngularJS的新手,所以我需要理解這個概念。

+0

它適用於按鍵事件,但不適用於通過JavaScript的動態值。 – Sumant

回答

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" > 
+0

我試過了,但沒有工作。任何鏈接。改變它的不調用控制器功能。 – Sumant

3
  1. 您正在使用on-change內的位置。 AngularJS有一個ngChange指令。用它。
  2. 一旦您使用ngChange還將setUrl替換爲setUrl()
  3. 然後,從setUrl函數簽名中刪除$ scope參數。 $ scope在MainCtrl的內部定義,因此它可以隱式地用於其中定義的所有函數。您不需要將其傳入。
  4. 您正在使用隱藏輸入從某處接收新的id,只能將其傳遞到setUrl函數。你不需要那個隱藏的輸入。考慮使用AngularJS共享服務或事件廣播,或使用$ scope。$ watch。
相關問題