如何从ng重复单个范围更改父范围 - Angular JS
How to change the parent scope from ng-repeat individual scope - Angular JS
我有以下情况
我有一个有 n 行的表格。在每一行中,都有一个total
列。对行列的所有值求和,并为一行填充总计。最后,将所有行总计相加以得到grant total
。
表行是使用 ng-repeat
生成的。这是我的逻辑,当单元格值更改时,行总数将被更新。行总计具有表达式 {{ $parent.grant_total = parseInt($parent.grant_total) + num1*num2 }}
,因此总和将与父作用域中可用的grant total
相加。但这并没有按预期工作,我不知道我哪里出了问题。我试图以棱角分明的方式做到这一点。在下面找到完整的代码
.HTML
<body ng-app="myApp" ng-controller="myController" ng-init="grant_total=0" >
<div ng-repeat="i in items">
<input type="text" ng-model="num1" />
<input type="text" ng-model="num2" />
<input type="text" value="{{ $parent.grant_total = parseInt($parent.grant_total) +(num1*num2) }}" />
</div>
<input type="text" value={{grant_total}} />
.JS
angular.module('myApp', [])
.controller('myController', ['$scope','function($scope){
$scope.items = [1,2,3];
}])
如果这是错误的,请向我建议一个正确的解决方案。任何帮助将不胜感激。提前致谢
看看这个
工作演示
.HTML
<div ng-app='myApp' ng-controller="myController">
<div ng-repeat="i in items">
Number One:<input type="text" ng-init="num1=0" ng-model="num1" />
<br>
Number Two:<input type="text" ng-init="num2=0" ng-model="num2" />
Total:<input type="text" ng-model="inputs[i-1]" ng-value="inputs[i-1] =(num1*num2);" />
<br>
<br>
</div>
<input type="text" ng-value="getGrandTotal()" />
</div>
脚本
var app = angular.module('myApp', []);
app.controller('myController', function ($scope, $rootScope) {
$scope.items = [1, 2, 3, 4];
$scope.inputs = [];
$scope.getGrandTotal = function () {
$scope.grantTotal = 0;
for (var i = 0; i < $scope.inputs.length; i++) {
$scope.grantTotal = $scope.grantTotal + $scope.inputs[i];
}
return $scope.grantTotal;
};
});
描述
-
$scope.inputs
数组将存储所有动态总值 - 由于
$scope.items = [1, 2, 3, 4];
和ng-repeat="i in items"
我以这样的方式放置了ng-model="inputs[i-1]"
,以便四个文本字段模型如下所示- 当
i = 1
时,input[1 - 1]
=>input[0]
=> 这将是第一个总计文本字段模态,它将在其中存储第一个总计 - 当
i = 2
时,input[1 - 2]
=>input[1]
=> 这将是第二个总计文本字段模式,它将在其中存储第二个总计 - 当
i = 3
时,input[1 - 3]
=>input[2]
=> 这将是第三个总文本字段模态,它将在其中存储第三个总计 - 当
i = 4
时,input[1 - 4]
=>input[3]
=> 这将是第四个总文本字段模态,它将在其中存储第四个总数
- 当
-
$scope.getGrandTotal
函数将遍历$scope.inputs
数组并返回总计。 -
ng-value
是一个角度表达式,其值将绑定到输入元素的 value 属性。 -
ng-value
对于使用 ngRepeat 绑定动态生成文本字段的值很有用
使用这个 HTML:
<body ng-app="myApp" ng-controller="myController" ng-init="result = { grant_total: 0 }" >
<div ng-repeat="i in items">
<input type="text" ng-model="num1" />
<input type="text" ng-model="num2" />
<input type="text" value="{{ result.grant_total = parseInt(result.grant_total) + (num1 * num2) }}" />
</div>
<input type="text" ng-model="result.grant_total" />
试试这个
<body ng-app="myApp" ng-controller="myController as parent" ng-init="parent.grant_total=0">
<div>
<input type="text" ng-model="num1">
<input type="text" ng-model="num2" ng-blur="parent.setRunningTotal(num1,num2)">
<input type="text" value="{{ (num1*num2) || 0 }}">
</div><br>
<br>
<input type="text" value="{{parent.runningTotal}}">
</body>
和 JS
angular.module('myApp', [])
.controller('myController', ['$scope', function($scope){
var self = this;
this.items = [1,2,3];
this.runningTotal = 0;
this.setRunningTotal = function(num1,num2) {
self.runningTotal += (num1 * num2);
}
}])
我正在使用控制器 AS 语法,它更清楚地说明了我实际绑定的内容,并让我不用$scope
而离开,这可能会很快变得混乱。基本上,它使用在 as
关键字之后定义的变量创建我的 scope 函数的实例,基本上它与执行此操作相同
var myClass = function() {
this.foo = 'Bar';
}
var fooBar = new myClass();
alert(fooBar.foo);
通过这种方式,fooBar是myClass的一个实例,我可以在我需要的地方调用它。 它在 angular 中的工作方式相同,在我上面的代码中,父是 myController 的一个实例,我可以根据需要尽可能深入地访问它,而无需使用$parent
更多信息,包括我们如何避免使用此方法$parent
的详细示例可以在这里找到
工作普伦克
http://plnkr.co/edit/2CMfXpfjrzfsD80WFKGX
- 如何将输入范围的值传递给JS中的变量
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 角度范围$watch()等效于Rivets.js
- Angular JS-文本框未在独立范围内更新
- 如何在D3.js中绘制地图投影上的点,并使用范围滑块过滤数据
- Moment.js与上午至下午的时间范围进行比较
- 如何从ng重复单个范围更改父范围 - Angular JS
- Knockout.js绑定范围
- Angular.js$范围和控制器
- JS:从数组中查找特定范围内的最低/最高数字
- JS中变量的范围
- Vue.js 在方法内失去范围
- 无法使用编程加载的属性更新范围滑块.js
- 根据范围过滤角度.js数组
- JQuery AJAX 和 OOP JS 范围困境
- 主干.js(具有 Require.js)变量/范围访问问题
- 节点.js中的模块范围
- DC.js图表中的初始范围选择
- 访问函数范围 js 之外的填充变量