Angular:计算值的位置

时间:2014-02-27 16:35:10

标签: angularjs

给出一系列“访问”[{ date:DATE, summary:TEXT }, { date:DATE, summary:TEXT }, …] 如果我需要显示上次访问,我将在哪里进行计算:

  1. 在控制器中,将计算值添加到$ scope - <div>{{lastVisit}}</div>
  2. 使用$ scope方法 - <div>{{getLastVisit()}}</div>
  3. 在视图中(这肯定感觉不对) - <div>{{visits[visits.length-1]}}</div>
  4. 我现在正在避免模型是应该在控制器内部还是在自己的服务中进行操作的问题。

3 个答案:

答案 0 :(得分:1)

使用选项1,您必须添加一个监视,以便在lastVisit数组更改时随时更新模型中的visits。选项2更好,但需要在模型中编写额外的单线函数。

第三个选项是合法的,需要零javascript所以如果你只需要简单地显示数组的最后一个元素,这就是要走的路。 它也是最有效的,因为它不需要内存中的任何其他对象,也不会调用任何其他函数(内部角度解析)

如果您不想要视图中的逻辑,选项2 是您的最佳选择。但我会创建一个更通用的方法,返回数组的最后一个元素:

<div>{{getLastItem(visits)}}</div>

$scope.getLastItem = function(arr){
    return arr[arr.length - 1];
};

请参阅小提琴:http://jsfiddle.net/hZM23/1/

答案 1 :(得分:0)

我个人对上述方法的偏好:

  1. 是的,这是最好的方法,因为您的视图中没有业务逻辑。
  2. 这与第一个选项具有相同的效果,但从视图访问模型是最佳实践。
  3. 不,因为您的业务逻辑可能会在未来发生变化。

答案 2 :(得分:0)

选项1 :在控制器中进行计算并将值存储到$scope。更新该值后,angular将自动更新您的视图。这可能是你想要的。

澄清:在您的控制器中,当visits数组更新(元素添加,删除等等)时,计算上次访问值并将其存储到$scope.lastVisit

var function newVisit( visit ){
  visits.append( visit );
  $scope.lastVisit = visit; // this will update your view
}

为什么我不认为选项2是正确的:Angular将绑定函数而不是值本身。绑定到值本身可能就是你的意思

你是正确的3,如果可能的话,将逻辑排除在视野之外。