2013-05-11 2 views
17

지시어에 보간 값을 설정하는 방법은 무엇입니까? 다음 코드에서 올바른 값을 읽을 수는 있지만 설정할 수는 없습니다.각 지시문에서 보간 값을 설정하는 방법은 무엇입니까?

JS :

app.directive('ngMyDirective', function() { 
    return function(scope, element, attrs) { 
     console.log(scope.$eval(attrs.ngMyDirective)); 

     //set the interpolated attrs.ngMyDirective value somehow!!! 
    } 
}); 

HTML : myscopevalue 내 컨트롤러의 범위에 대한 값입니다

<div ng-my-directive="myscopevalue"></div> 

. 당신이 범위에 대한 값을 설정하고 싶지만 (미리) 속성의 이름을 모르는 경우

답변

24

, 당신은 object[property] 구문을 사용할 수 있습니다 경우

scope[attrs.myNgDirective] = 'newValue'; 

을의 문자열 속성에 점 (예 : myObject.myProperty)이 포함되어 있으면 작동하지 않습니다.

// like calling "myscopevalue = 'newValue'" 
scope.$eval(attrs.myNgDirective + " = 'newValue'"); 

[업데이트 : 당신은 정말 대신 $eval$parse를 사용해야합니다 당신은 임무를 수행 할 $eval를 사용할 수 있습니다. 지시어가 자동으로 업데이트 안에 당신은 this Angular/jQuery color picker JSFiddle example이의 예를 볼 수 있습니다

app.directive('ngMyDirective', function() { 
    return { 
     scope: { 
      theValue: '=ngMyDirective' 
     }, 
     link: function(scope, element, attrs) { 
      // will automatically change parent scope value 
      // associated by the variable name given to `attrs.ngMyDirective` 
      scope.theValue = 'newValue'; 
     } 
    } 
}); 

, scope.color에 할당 :. Mark's answer보기]

을 당신이 분리 범위를 사용하는 경우, 당신은 = 주석을 사용할 수 있습니다 변수는 을 컨트롤러 범위의 지시문에 전달했습니다.

+0

범위 [attrs.myNgDirective] = 'newValue'; 일했다! myNgDirective의 값은 범위의 하위 객체가 아니라 범위에 직접 있어야합니다. 어떤 의미인지 – Anton

+0

나는 당신이 객체 표기법을위한 할당 표현식으로'$ eval'을 할 수 있어야한다고 믿는다; 내 대답을 업데이트 할게. –

+0

멋진 것입니다. 범위와 같은 것. $ eval (attrs.ngMyDirective = '새 값')? – Anton

45

지시문이 격리 범위를 사용하지 않고 속성을 사용하여 범위 속성을 지정하고 그 속성 값을 변경하려는 경우에는 $parse을 사용하는 것이 좋습니다. (I 구문은 $ 평가의 것보다 더 좋은 생각합니다.)

app.directive('ngMyDirective', function ($parse) { 
    return function(scope, element, attrs) { 
     var model = $parse(attrs.ngMyDirective); 
     console.log(model(scope)); 
     model.assign(scope,'Anton'); 
     console.log(model(scope)); 
    } 
}); 

fiddle

$parse 작품 속성이 점을 포함할지 여부.

+0

흥미로운 것들. 답변 해주셔서 감사합니다. 구문 분석이 eval보다 나은 용어/구문이 될 수 있습니다.건배 – Anton

+3

확실히 범위 분리없이 '='을 구현하는 올바른 방법입니다. –

+0

내 지시어를 변경하여 뷰에 반영하려면'model.assign (...)'다음에'scope. $ apply()'를 추가해야했습니다. 클리너 솔루션이 있습니까? – Juljan

관련 문제