【发布时间】:2014-06-18 15:31:28
【问题描述】:
我正在使用 angularjs 指令模板从传入的模型中呈现单个计算值(总和)。
如果我使用模板正常呈现值,则没有问题。 呈现的值只是传递给指令/模板的一堆行对象值的总和,如下所示:
ngApp.directive('subtotal', function() {
return {
restrict: 'E',
scope: {
icRows: '='
},
template: '<div><strong>Sub Total:</strong> {{subTotal()}}</div>',
replace: true,
link: function($scope, $element, $attr) {
$scope.subTotal = function() {
var t = 0;
for(var i=0; i<$scope.icRows.length; i++ ) {
t += $scope.icRows[i].price;
}
return t;
}
}
};
});
<div ng-app="app">
<div ng-controller="MyCtrl">
<div ng-repeat="row in rows">
<input ng-model="row.name" /> | <input ng-model="row.price" />
</div>
<hr/>
<subtotal ic-rows="rows"></subtotal>
</div>
</div>
这很好用。 在这里演示:http://jsfiddle.net/jralston/p8FLV/
我的问题是“subTotal”变量实际上是 AJAX 调用的结果。当“rows”变量发生更改时,需要调用此 ajax 调用。为此,我将指令中的模板调整为:
<div><strong>Sub Total:</strong> {{subTotalInvoker()}} {{subTotal}}</div>
现在在指令中,函数 $scope.subTotalInvoker() 调用 ajax 调用。来自该回调的回调设置了“subTotal”的值
再一次,这工作得很好。
这里的演示: http://jsfiddle.net/jralston/wpYjL/
但是,这似乎是一种完全错误的做法。
我尝试将 $watch 添加到 $scope.icRows 但它不起作用。也许我做错了什么。
非常欢迎任何关于如何最好地做到这一点的指示和/或更正。
谢谢
约翰
【问题讨论】:
标签: angularjs angularjs-directive