2013-09-07 4 views
0

변수에서 표현식을 실행하는 방법은 무엇입니까?angularjs 변수에서 표현식을 실행하십시오.

다른 입력에 의존하는 수식과 같은 것이 필요합니다. 예를 들어 내 데이터 :

$scope.items = [{ 
    name: 'first', 
    formula: '', 
    value: 1, 
    type: 'text', 
},{ 
    name: 'second', 
    formula: '', 
    value: 2, 
    type: 'text', 
},{ 
    name: 'third', 
    formula: '{first}+{second}', 
    type: 'formula', 
}]; 

내보기 :

<ul> 
<li ng-repeat="item in items"> 
    <div ng-switch on="item.type"> 
     <div ng-switch-when="text"> 
      <input type="text" ng-model="item.value" name="{{item.name}}"> 
     </div> 
     <div ng-switch-when="formula"> 
      <span>{{item.formula}}</span> 
     </div> 
    </div> 
</li> 

나는 결과가 3 것을 원하는하지만 {첫번째}의 + {초}

+0

'{first} + {second} '가 어떻게 3이 될 것으로 예상합니까? – AlwaysALearner

+0

오, 그것을 잊어 버렸습니다! 죄송합니다 입력 [name = first]에서 값을 가져 와서 [name = second]을 입력하고 합계를 적용합니다. – axon

+0

컨트롤러 메서드를 사용하여 답안에 표시된대로 수식을 평가해야합니다. – AlwaysALearner

답변

1
<div ng-switch-when="formula"> 
    <span> 
     {{getFormulaResult(item.formula)}} 
    </span> 
</div> 
당연히

컨트롤러 방법 :

$scope.getFormulaResult = function(formula){ 
    var formulaSplits = formula.split("+"); 
    var left = formulaSplits[0]; 
    left = left.substr(1); 
    left = left.substring(0, left.length-1);   
    var right = formulaSplits[1]; 
    right = right.substr(1); 
    right = right.substring(0, right.length-1); 
    var sum = 0; 
    for(var i = 0; i < $scope.items.length; i++){ 
     if($scope.items[i].name == left || $scope.items[i].name == right){ 
      sum = sum + parseInt($scope.items[i].value, 10); 
     } 
    } 
    return sum || 0; 
} 
+0

입력 값 중 하나에서 값이 변경되면 작동하지 않습니다. – axon

+1

@axon Works for me. 보세요 : http://jsfiddle.net/nwbsT/24/ – AlwaysALearner

+0

parseInt! 내가 그 사람의 시력을 놓칠 수있는 방법! 감사! 더 어려운 표현식을 위해 코드를 수정하려고 노력할 것입니다. – axon

관련 문제