2015-06-15 78 views
0

我正在使用过滤器来计算值,但随后我想稍后再访问它们。AngularJS - 无法使用过滤器设置视图中的变量

这里是我的代码片段:

app.controller('CreateProposalCtrl', function() { 
    $scope.EstimatedCostItem = []; 
}); 

-

app.filter('EstimatedValue', function() { 
     return function(input, arguments) { 
      ...blah blah calculations 
      return calculations; 
     }; 
    }); 

我不知道该如何HTML应提交。

这显示正是我want..BUT我需要它来设置一个变量,所以我可以访问它在其他地方..

<span ng-repeat="foo in bar"> 
    {{ Type.JobTypeID | EstimatedValue: form }} 
</span> 

我已经试过:

<span ng-model="EstimatedCostItem[Type.JobTypeID]" ng-bind="Type.JobTypeID | EstimatedValue: form"></span> 

和:

<span ng-bind="EstimatedCostItem[Type.JobTypeID]">{{ Type.JobTypeID | EstimatedValue: form }}</span> 

和:

<span ng-init="EstimatedCostItem[Type.JobTypeID] = (Type.JobTypeID | EstimatedValue: form)"></span> 

似乎没有设置变量。我难倒:(

+0

您何时需要设置变量? –

回答

1

过滤器语法只有特定的角度表达式中的作品。使用普通表达式的JavaScript不能使用foo | bar过滤器语法,因为它不是有效的JavaScript。

可能做的是什么用$filter

var value = $filter('EstimatedValue')(foo); 

记住注入$filter到控制器中

随着中说,从这张Proba。 bly不是过滤器的最佳使用。为什么不创建一个计算并存储该值的范围函数?例如:

$scope.EstimatedValue = function(foo) { 
    var value = doSomeCalculations(); 

    // store for usage elsewhere 
    this.estimatedValuesCache[foo] = val; 

    return val; 
}; 
+0

太好了。谢谢你。要回答你的问题,我想在其他控制器中重用我的过滤器,所以不想复制一个函数。 – user1894292