2013-07-25 2 views
0

나는 (식 전달)이 같이 보이는 지시하고 싶습니다 :AngularJS 지시문에서 표현식에 액세스하려면 어떻게해야합니까?

<button ui:spin="form.submitting">Save</button> 

을하지만이 form.submitting 식을 액세스 할 수 (또는 방법)의 경우 확실입니다. 과거에 나는이 같은 짓을했습니다

<button ui:spinner-button ui:spin="form.submitting">Save</button> 

나는 uiSpinnerButton 지시어의 uiSpin 속성을 읽을 경우,하지만 난

모든 "하나에 모든"이 작업을 수행하는 방법을 알고 싶습니다 아이디어?

답변

0

: 당신이 값을 수정하지 않는 경우

myApp.directive('uiSpin', function($parse) { 
    return function(scope, element, attrs) { 
     var model = $parse(attrs.uiSpin) 
     console.log(model(scope)); 
     // If you want to change the value in your directive: 
     model.assign(scope, "???"); 
    } 
}); 

, 당신은 단순히 대신 $ 평가를 사용할 수 있습니다

.directive('uiSpin', function() { 
    return { 
     link : function(scope, element, attrs, ngModel) { 

      scope.$watch(attrs.uiSpin, function() { 

       // do stuff here... 

      }); 
     } 
    } 

}) 

내가 ngShow에 소스를이를 기반으로 :처럼, 내 지시 보인다 https://github.com/angular/angular.js/blob/master/src/ng/directive/ngShowHide.js

2

당신은 다음과 같이 지시의 범위를 정의하여이를 참조 할 수 있어야한다 : 지시어의 연결 기능 내부

scope: { 
    spin: '=uiSpin' 
} 

, 그것은 scope.spin 될 것입니다. 비 절연 범위에 대한

+0

'spin :'= uiSpin''이어야합니다. – noj

+0

oops, thanks @ jonnyynnoj – DanS

+0

언급하지 않으 셨습니다. 분리되지 않은 범위로하고 싶습니다. – mmattax

1

, $parse를 사용 : 나는 그것을 가지고

console.log(scope.$eval(attrs.uiSpin)); 
+0

필자는 이렇게 가까이에있는 것 같은 느낌이 들지만, 변경 사항은 어떻게 볼 수 있습니까? scope.watch (function() {return scope. $ eval (attrs.uiSpin)}}, function() {console.log ('uiSpin changed');}); 작동하지 않는 것 같습니다. – mmattax

+1

'watch' 앞에'$'가 없습니까?)'model' :'scope. $ watch (model, ...)'를 보거나 이미 발견되면, 속성을 볼 수 있습니다 :'scope. $ watch (attrs.uiSpin, ...)'. –

관련 문제