我有一个带有两个路由/模板登录和主要的应用程序。登录模板的用户输入值绑定到两个范围变量Tile
和username
。在应用启动时,范围变量用'abc'和false初始化。
问题 - >
控制器功能始终绑定到相同的初始值 在应用程序启动时给出它不反映范围变量 在登录模板上被更改
在标记上使用{{}}来查看绑定是否正确发生, 插值部分实际上反映了被改变的值。
如果做错了请帮忙。
isAdmin
登录模板:
app.controller('appController', function() {
$scope.username = "abc"
$scope.isAdmin = false;
this.radioChange = function() {
console.log($scope.isAdmin) // consoles initialized value always
}
this.textChanged = function() {
console.log($scope.username) // doesn't reflect changed value, shows "abc"
}
})
index.html
<input type="radio" ng-model="isAdmin" ng-value="true" ng-
change="ctrl.radioChange()">
<input type="radio" ng-model="isAdmin" ng-value="false" ng-
change="ctrl.radioChange()">
<input type="text" ng-model="username" ng-change="ctrl.textChanged()">
{{isAdmin}} // view binded correctly to change
{{username}}
的app.config
<body ng-controller="appController as ctrl">
<ui-view> </ui-view>
</body>
答案 0 :(得分:1)
这似乎正在发生,因为登录模板代码的范围(父级)与appcontroller
范围(子级)不同。
虽然子范围可以从父级读取属性,但是对这些属性的更改(特别是基本类型)会在子范围上创建新属性。
从身体中删除appController
,而不是使用通过路线完成的控制器关联(您部分拥有):
var login = { name: 'login', url: '/', controller='appController as ctrl',
templateUrl: 'login.html'}
$stateProvider.state(login);
如果使用控制器作为方法,最好避免范围,因此输入变为
<input type="text" ng-model="ctrl.username" ng-change="ctrl.textChanged()">
最后,这将有助于您了解范围继承问题https://github.com/angular/angular.js/wiki/Understanding-Scopes