如何在angularjs中实现基于其他对象的对象更新
how in angularjs we can achieve the object update which is based on some other objects?
我试图用添加方法(简单地增加它们的值)更新变量b
和c
的值,但a
(两者的总和)没有反映此操作。
我知道我们可以使用$scope.$watch
函数来更新它们,但是我有一个应用程序,其中有许多对象依赖于其他对象。如果我的依赖对象改变了,我希望我的对象也改变,而不使用任何$watchers。
这只是一个简单的例子,我试图在观察者的帮助下更新$scope.a
和$scope.obj.a
值。我该怎么做呢?
<html ng-app="app">
<head>
<title></title>
</head>
<body ng-controller="ctrl">
a : {{a}}<br />
b: {{b}}<br />
c: {{c}}<br />
<button ng-click="add();">Add</button>
<br /><br /><br />
obj.a : {{obj.a}}<br />
obj.b: {{obj.b}}<br />
obj.c: {{obj.c}}<br />
<button ng-click="obj.add();">obj.Add</button>
<script type="text/javascript" src="angular.min.js"></script>
<script>
var app = angular.module('app', []);
app.controller('ctrl', function ($scope) {
$scope.b = 1;
$scope.c = 2;
$scope.a = $scope.b + $scope.c;
$scope.$watch('b', function (newValue, oldValue) {
$scope.a = $scope.b + $scope.c;
});
$scope.add = function () {
$scope.b++;
$scope.c++;
};
//this is object with dot property example
$scope.obj = {};
$scope.obj.b = 1;
$scope.obj.c = 2;
$scope.obj.a = $scope.obj.b + $scope.obj.c;
$scope.$watch('obj.b', function (newValue, oldValue) {
$scope.obj.a = $scope.obj.b + $scope.obj.c;
});
$scope.obj.add = function () {
$scope.obj.b++;
$scope.obj.c++;
};
});
</script>
</body>
</html>
您可以通过声明(或对象)来实现这一点。作为一个函数而不是一个对象/对象属性。每当该函数使用的任何属性发生变化时,Angular都会自动重新执行该函数,因此你的"a"值将会改变,而不需要你显式地定义这些表。
请看下面更新后的代码:
var app = angular.module('app', []);
app.controller('ctrl', function ($scope) {
$scope.b = 1;
$scope.c = 2;
$scope.a = function() {return $scope.b + $scope.c};
$scope.add = function () {
$scope.b++;
$scope.c++;
};
//this is object with dot property example
$scope.obj = {};
$scope.obj.b = 1;
$scope.obj.c = 2;
$scope.obj.a = function() {
return $scope.obj.b + $scope.obj.c;
}
$scope.obj.add = function () {
$scope.obj.b++;
$scope.obj.c++;
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-app="app">
<head>
<title></title>
</head>
<body ng-controller="ctrl">
a : {{a()}}<br />
b: {{b}}<br />
c: {{c}}<br />
<button ng-click="add();">Add</button>
<br /><br /><br />
obj.a : {{obj.a()}}<br />
obj.b: {{obj.b}}<br />
obj.c: {{obj.c}}<br />
<button ng-click="obj.add();">obj.Add</button>
</body>
</html>
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 使用同一对象中的其他变量声明变量
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 如何使用object.assign()从其他对象引用基本对象属性
- 对象获胜'如果qml中的其他地方定义了数字动画属性,则t设置动画
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 对象数组-与其他列数据相比,增加一列
- PJAX:记住其他对象状态
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- AngularJS:根据其他对象预先选择ng repeat中的select元素
- 如何在 JavaScript 中访问函数中的其他属性值作为对象属性值
- 如何在 Javascript 中向数组添加其他对象
- 追加子数据 URI,替换 IE 中的其他对象
- 将 JavaScript 对象转换为其他格式
- 挖空、视图模型位于其他对象和数据绑定中
- 如何从帖子对象添加其他信息以在护照中注册用户
- getList 的响应应该是一个数组,而不是一个对象或其他东西
- 函数中的If语句会创建其他对象
- 如何在 javascript 中将变量传递给对象内的其他函数
- 将JSON对象转换为敲除observable在IE8中不起作用,但在所有其他浏览器中都起作用