如何使用angularjs跟踪输入字段值的动态变化

时间:2013-06-18 09:05:24

标签: angularjs angularjs-scope

我有一个输入字段,它在某些事件上动态变化。

<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的新手,所以我需要理解这个概念。

2 个答案:

答案 0 :(得分:3)

  1. 您正在使用on-change。 AngularJS有一个ngChange指令。使用它。
  2. 使用ngChange后,还将setUrl替换为setUrl()
  3. 然后,从setUrl函数签名中删除$ scope param。 $ scope在MainCtrl内定义,因此它可以隐式地用于其中定义的所有函数。你不需要传递它。
  4. 您正在使用隐藏输入从某个地方接收新的id,只是将其传递给setUrl函数。您不需要隐藏的输入。考虑使用AngularJS共享服务或事件广播,或使用$ scope。$ watch。

答案 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" >