我来自Rails
背景,我正在尝试使用AngularJS with Rails
。我坚持一个非常简单的事情:如何在Angularjs environment
中构建rails称为“虚拟属性”的内容?让我举个例子。
我有一个名为Medication的rails模型,它有两个属性,剂量和计数。我希望有一个'总'虚拟属性,返回剂量*计数。这在Rails中是微不足道的,因为它只是类Medication的实例方法。
那么,它如何映射到AngularJS
世界?
澄清:我正在使用针对药物(复数)的ng-repeat指令,我有MedicationsController
。对于每个ng-repeat循环,我得到一个'medication
'对象,我想要应用这个'实例方法'
total = function() { return dosage * count }
这是怎么编码的?我在哪里放这个功能?
答案 0 :(得分:6)
使用AngularJS非常简单,因为您可以在AngularJS视图中使用任何JavaScript函数。所以只需在对象上(或直接在作用域上)定义一个函数。例如,给这样一个控制器:
var MedicationCtrl = function($scope) {
$scope.medication = {
dosage : 0.5,
count : 10,
total : function() {
return this.dosage * this.count;
}
};
}
您可以简单地写一下:
Total: {{medication.total()}}
这是一个jsFiddle:http://jsfiddle.net/4r5g5/1/
然后,如果你有一个项目集合并且不想在对象级别上放置任何逻辑,你可以在控制器上定义这个方法,如下所示:
var MedicationCtrl = function($scope) {
$scope.total = function(medication) {
return medication.dosage * medication.count;
};
};
并使用以下标记中的此函数:
<ul ng-repeat="m in medications" ng-controller="MedicationCtrl">
<li>{{m.dosage}} + {{m.count}} = {{total(m)}}</li>
</ul>
上面的代码在jsFiddle中:http://jsfiddle.net/4r5g5/3/