2012-12-26 4 views
6

기본적으로 지시문 내에서 표현식의 변경 사항을들을 수 있습니까?지시문 내에서 표현식을 관찰하십시오.


나는 조건부 특정 필드를 요구하는 문서화되지 않은 ng-required을 사용하고 있습니다 : 이것은 위대한 작품을

<input type="checkbox" ng-model="partner" checked /> 
<input ng-model="partnerName" placeholder="required" ng-required="partner" /> 

(here's the Plunkr). 유일한 문제는 실제로 필요한지 여부와 관계없이 placeholder "필수"텍스트를 유지한다는 것입니다.


그래서 직접 지시문을 작성하기로했습니다.

<input ng-placeholder="{ 'required': partner }" /> 

아이디어는 각도의 ng-class 유사하지만, 어떻게 이러한 목표를 달성하는 방법이 없습니다 : 여기 그것이 작동하는 방법입니다. 여기에 지금까지있어 무엇 :

나는 placeholder 값을 결정하는 데 사용할 수있는 좋은 개체를 기록
app.directive('ngPlaceholder', function ($parse) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attrs) { 
      console.log(scope.$eval(attrs.ngPlaceholder)); 
     } 
    } 
}); 

:

{ required: true } 

을하지만 어떻게 내가 그 $digest/$apply주기에 후크 않습니다를 partner이 변경 될 때마다 placeholder 속성을 업데이트 하시겠습니까?

답변

2

이게 원하는가요?

placeholder="{{{true: 'required', false:''}[partner]}}" 

(가) 위 {true: 'required', false:''} 다음 인덱싱에 객체를 만듭니다 plunker

당신의 연결 기능에 대한 기본 개념은

link: function (scope, element, attrs) { 
     scope.$watch(attrs.xngPlaceholder, function (newVal, oldVal, scope) { 
      element.removeAttr('placeholder'); 
      var att = ''; 
      angular.forEach(newVal, function (elm, key) 
       att += elm ? (key + ' ') : ''; 
      }); 
      element.attr('placeholder', att); 
     }, true); 
    } 
+2

하나의 제안 : 향후 버전에서 동일한 구문으로 ng-placeholder를 구현한다는 것을 알고 있지 않다면 ng- prefix는 각도이므로 사용하지 마십시오 –

+0

고마워요! 사실입니다. 그러나 나는 단지 원래의 게시물 코드를 사용한다. – maxisam

0

지시문을 필요로하지 않는 다른 방법처럼해야한다 현재 값이 partner 인 개체입니다.

관련 문제