2016-06-29 4 views
0

참고 : angularjs execute expression from variable과 유사합니다. 사용중인 모든 가능성과 데이터 세트를 사용하여 범위를 혼란스럽게하고 싶지는 않습니다.문자열에서의 AngularJS 표현

Angular의 표현식에서 사전 결정된 수식을 사용할 수 있기를 원합니다.

예 :

<div ng-repeat="item in myArray"> 
    <span>{{item['propertyOne'] + item['propertyTwo']}}</span> 
</div> 

가 어떻게이를 것 : 내가 원하는 입력 한 것처럼 formulaValue에 수식이 평가됩니다

var config = { 
    "Test": { 
     name: "test", 
     formula: true, 
     formulaValue: "item['propertyOne'] + item['propertyTwo']" 
    } 
    } 

<div ng-repeat="item in myArray"> 
    <span ng-if="config[item.name].formula">{{config[item.name].formulaValue}}</span> 
</div> 

? 상당히 많은 양의 설정으로 설정되기 때문에 각 공식 유형에 대해 $ 범위 기능을 만드는 것은 실현 가능하지 않습니다.

+0

이 구성이 이미 만들어져 있으며 해당 문자열 형식을 사용해야한다는 말입니까? 또는 구성을 재구성 할 수 있습니까? – charlietfl

+0

구조 조정이 가능합니다. 이 예제는 매우 간단하며 완전히 표현하지는 않습니다. 단지 그 요지입니다. –

+0

'eval()'을 사용할 수 있지만, 보안 때문에 항상 eval을 피하는 것이 가장 좋습니다. 연결을 위해서 배열에 필드 이름을 가진 프로퍼티가 더 이상적 일 것입니다. – charlietfl

답변

1

하지 가장 이상적인 구성 설정하지만, 최악의 경우 당신이 잘으로 인해 보안에 좋아되지 eval()을 사용해야합니다

뭔가 같은 :

function parseConfig(item, configKey){ 
    if(config[configKey].formula){ 
     return eval(config[configKey].formulaValue); 
    } 
} 
$scope.parseConfig = parseConfig; 

는 설정과 서비스에 그 둘 것 그러나 지금은 범위에 넣을 것입니다. 그것은 나를 있었다면 내가

var config = { 
    "Test": { 
     name: "test", 
     formula: true, 
     formulaType: 'concat', 
     formulaValue: ['propertyOne','propertyTwo'] 
    } 

같은 것을 보이는 설정을 선호 뭔가

{{parseConfig(item, 'Test')}} 

같은 관점에서

은 다음 formulaType을 확인하고 속성 필요한 일을 할 것 eval()을 사용하지 않고 formulaValue에

+0

'$ parse'가 좋을지도 모릅니다. –

+0

어떤 경우에는 더 복잡한 연산을 위해 eval을 사용해야하는 경우가있을 수 있습니다. 그러나 수식 유형을 사용하고 각 유형을 처리하는 일부 함수를 조정하는 것은 그리 나쁘지 않을 것입니다. 그러나, 나는 아마 몇몇 공식을 평가할 필요가있을 것이다. 내가 설정을 완전히 제어 할 수 있다면이 경우 eval에 대한 보안 문제는 무엇입니까? –

+0

eval()을 (를) 사용하는 데 대한 많은 정보를 찾고 쉽게 찾을 수 있습니다. – charlietfl