通过ng模型更新不同的$scope对象属性
Updating different $scope object properties via ng-model
请查看下面的代码。在输入字段中插入有效值时,为什么$scope.data
变量不更新?我怎样才能做到这一点?
代码笔:http://codepen.io/uloco/pen/jboorN
HTML
<div ng-app="app" ng-controller="AppController" class="content">
<input type="tel" ng-model="form.phone" placeholder="phone" />
<input type="email" ng-model="form.email" placeholder="email" />
<p>{{form}}</p>
<p>{{data}}</p>
</div>
JS
angular
.module('app', [])
.controller('AppController', function($scope) {
$scope.form = {};
$scope.data = {
foo: 'bar',
phone: $scope.form.phone,
email: $scope.form.email
}
});
为什么$scope.data变量不更新?
因为CCD_ 2和CCD_ 3之间没有连接。这是两个具有独立属性的独立对象,您正在更改$scope.form
的属性。
如果您真的想拥有两个独立的对象,则需要手动将它们与$scope.form
上的$scope.$watch
同步
$scope.$watch('form', function(obj) {
$scope.data.phone = obj.phone;
$scope.data.email = obj.email;
}, true);
演示:http://codepen.io/anon/pen/PPvvBr?editors=101
或使用ngChange
指令:
<input type="tel" ng-model="form.phone" placeholder="phone" ng-change="sync()" />
<input type="email" ng-model="form.email" placeholder="email" ng-change="sync()" />
和
$scope.sync = function() {
$scope.data.phone = $scope.form.phone;
$scope.data.email = $scope.form.email;
};
演示:http://codepen.io/anon/pen/bVyyQN?editors=101
在这种情况下,CCD_ 8溶液是优选的。然而,如果您有超过2个字段,那么$watch可能会更简单。
您可以尝试添加ng更改:
$scope.change = function(data){
$scope.data.phone = data.phone;
$scope.data.email = data.email;
};
和Html
<input type="tel" ng-model="form.phone" placeholder="phone" ng-change="change(form);"/>
<input type="email" ng-model="form.email" placeholder="email" ng-change="change(form);"/>
$scope.form.phone和$scope.form.email是在控制器设置中分配的,它们都是未定义的。即使$scope.form发生了更改,$scope.data也不知道,因为它存储的所有内容都是"未定义的"。
为了检索数据,您可以实现这样的功能:
$scope.getData = function () {
return {
foo: 'bar',
phone: $scope.form.phone,
email: $scope.form.email
};
};
这样可以确保在需要时对对象进行新的初始化。
您的$scope.data只进行了一次签名,不会在电话或电子邮件更改时更改。
尝试使用$watchGroup
$scope.$watchGroup(['form.phone', 'form.email'], function(newValues, oldValues, scope) {
scope.data = {
foo: 'bar',
phone: scope.form.phone,
email: scope.form.email
}
});
您可以使用HTML
<div ng-app="app" ng-controller="AppController" class="content">
<input type="tel" ng-model="form.phone" placeholder="phone" />
<input type="email" ng-model="form.email" placeholder="email" />
<p>form: {{form}}</p>
<p>data: {{data()}}</p>
</div>
JS
angular
.module('app', [])
.controller('AppController', function($scope) {
$scope.form = {};
$scope.data = function() {
return {
foo: 'bar',
phone: $scope.form.phone,
email: $scope.form.email
};
}
});
更新的代码笔:http://codepen.io/anon/pen/Xmwwye
相关文章:
- 将$scope对象作为参数提供给$digest中的观察者背后的逻辑
- Angularjs:重置特定的$scope对象属性
- 使用过滤器对 ng-repeat$scope对象进行排序
- Scope对象没有'Angularjs中没有$scope就无法更改
- 无法访问angularjs中http响应回调函数之外的$scope对象
- Angular指令中未定义Scope对象
- 通过ng模型更新不同的$scope对象属性
- AngularJS:can't将$scope对象推到末尾b/c数据保持更新
- 如何在$scope对象中设置一个async函数之外的变量
- 将$scope对象传递给路由,保持刷新
- 将$scope对象传递给ng-if和ng-class三元条件不工作
- 如何在angular js中更新$scope对象的值
- Angular $scope对象在视图中没有更新
- $scope对象在$http.get之后仍然未定义
- 如何注入$scope对象到对话框模板
- Angular访问带有动态名称的$scope对象
- 我应该始终将函数绑定到$scope对象吗
- 更新AngularJS服务中的$scope对象不会更新View
- 如何在角度控制器中将res.render数据用作$scope对象
- 在angularjs中获取$scope对象所有真值长度的最佳方法是什么