2013-09-25 2 views
1

지시어에 무언가가 설정되어있을 때 업데이트하려는 범위 이름이 포함 된 지시문이 있습니다.범위 이름을 지시문으로 업데이트하십시오.

<div data-my-directive data-scope-var-to-update="my_scope_variable"></div> 



.directive('myDirective', function($rootScope){ 
     return function(scope, element, attrs){ 

      var scope_var_name = attrs.scopeVarToUpdate; 

      scope[scope_var_name] = 'This message was updated from the directive'; 
     } 
    }) 

위의 내용은 범위 변수에 점 표기법이없는 경우에만 내가 원하는 것을 할 수있게 해줍니다.

제 질문은 어떻게 $ scope.a.b와 같은 점 표기법을 포함하는 범위 변수를 맞추기 위해 위의 내용을 수정할 수 있습니까? 자사는 새로운 과제가 부모 컨트롤러에 의해 액세스 할 수 있어야 의미의 직업 수행하면

<div data-my-directive data-scope-var-to-update="a.b"></div> 

위의 뒤에 아이디어는 범위 변수 이름에 전달하고 지침에서이를 업데이트하는 것입니다.

+1

을 구문 분석 난 당신이 문자열을 구문 분석하고 각 개체를 개별적으로 만들어야 할 것 같아요. a = {}처럼 a.b = "이 메시지는 업데이트되었습니다 ....". –

+0

@CraigSquire 다행스럽게도 angular는 함수 'scope. $ eval'을 사용합니다. –

답변

1

당신은 점 표기법 모델 $ 구문 분석 서비스를 사용해야합니다.

var getter = $parse(parseattrs.scopeVarToUpdate); 
var setter = getter.assign; 
getter(scope); //get value 
setter(scope,'value'); //set value 

참조 문서 여기 http://docs.angularjs.org/api/ng이에 대한 지침이 같은 뭔가. $는

+0

나는이 대답을 좋아한다. 전에 parse 서비스를 사용하지 않았기 때문에 나 자신을 위해 시험해보아야했다. http://plnkr.co/edit/BaKc7GEt5zXnnhQxJHBk –

+0

감사합니다. 감사합니다. 감사합니다. – Malcr001

1

당신은

.directive('myDirective', function(){ 
    return function(scope, element, attrs){ 
     scope.$eval(attrs.scopeVarToUpdate) = 'This message was updated from the directive'; 
    } 
}) 

scope.$eval(attrs.scopeVarToUpdate)을 사용 또는 양방향 바인딩과 격리 된 범위를 사용하고 그 중 하나에 대해 걱정하지 마십시오. 절연 범위 버전 :

.directive('myDirective', function(){ 
    return{ 
     scope:{scopeVarToUpdate:'='}, 
     link: function(scope, element, attrs){ 
     scope.scopeVarToUpdate = 'This message was updated from the directive'; 
     } 
    } 
}) 
+0

첫 번째 옵션은 다음과 같습니다. 잡히지 않은 ReferenceError : 할당의 왼쪽이 유효하지 않습니다. – Malcr001

+0

Ahh,'var model = scope. $ eval (attrs.scopeVarToUpdate); model = 'whatever'; ' –

관련 문제