2013-06-18 22 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。
相关问题