我有一个输入字段,它在某些事件上动态变化。
<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的新手,所以我需要理解这个概念。
答案 0 :(得分:3)
on-change
。 AngularJS有一个ngChange
指令。使用它。setUrl
替换为setUrl()
。setUrl
函数签名中删除$ scope param。 $ scope在MainCtrl
内定义,因此它可以隐式地用于其中定义的所有函数。你不需要传递它。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" >