如何使用angularjs设置虚拟属性?

时间:2012-11-28 19:18:06

标签: javascript ruby-on-rails angularjs

我来自Rails背景,我正在尝试使用AngularJS with Rails。我坚持一个非常简单的事情:如何在Angularjs environment中构建rails称为“虚拟属性”的内容?让我举个例子。

我有一个名为Medication的rails模型,它有两个属性,剂量和计数。我希望有一个'总'虚拟属性,返回剂量*计数。这在Rails中是微不足道的,因为它只是类Medication的实例方法。

那么,它如何映射到AngularJS世界?

澄清:我正在使用针对药物(复数)的ng-repeat指令,我有MedicationsController。对于每个ng-repeat循环,我得到一个'medication'对象,我想要应用这个'实例方法'

total = function() { return dosage * count }

这是怎么编码的?我在哪里放这个功能?

1 个答案:

答案 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/