2014-02-22 2 views
2

저는 Angular를 처음 사용하고 있으며 지시어를 작성하려고 시도하고 고립 된 범위 속성에 대해 질문하고 있습니다. 나는 지시가있는 경우 :AngularJS 지시문 - 격리 된 범위 특성이 필요할 수 있습니까?

MyApp.directive('myDirective', function() { 
    return { 
     scope: { 
      symbol: '@' 
     }, 

...

그것은 기호가 어떻게 든 필요 할 수 있습니까? 필자의 경우 지시문을 제공하지 않으면 올바르게 작동하지 않습니다.

+0

누군가 특성을 제공하지 않은 경우 어떤 행동을 원하십니까? –

+0

귀하의 지시문 링크 또는 컨트롤러 기능을 확인 scope.symbol에 대한 정의되지 않은 또는 무엇이든지 잘못된 값을 던지면 throw 및 오류가 주어지지 않으면 –

+0

이것은 개발 중에 사용됩니다. 뷰를 디자인 할 때 지시어가 올바르게 작동하려면 특정 속성이 필요하다는 것을 잊거나 잊어 버리는 것이 일반적입니다. 그들이 올바른 사용법을 알 수 있도록 시각적 단서를 제공해야합니다. 경고 또는 축배 일 수도 있고 템플릿의 내용을 도움말 텍스트로 바꿀 수도 있습니다. – Elliot

답변

1

두 번째 지시어를 사용할 수 있으며 첫 번째 지시어를 사용할 수 있습니다. myDirective 실제로 symbol을 요구하는

MyApp.directive('myDirective', function() { 
    return { 
     scope: { 
      symbol: '@' 
     }, 
     require: 'symbol', 
     link: angular.noop //this is needed to check for the required controller 
     ... 
    } 
} 

MyApp.directive('symbol', function() { 
    return { 
     controller: angular.noop 
    } 
} 

컨트롤러가 필요하다. 이와 같은 경우에는 지시문에 네임 스페이스를 접두어로 사용하는 것이 중요합니다.

다음은이 작업의 예를 보여주는 jsfiddle입니다. 이 예에서는 각도 오류 서비스를 재정 의하여 모든 오류에 대한 경고를 표시합니다. 오류의 원인은 <div>에 필수 지시문이 누락되어 있음을 알 수 있습니다.

http://jsfiddle.net/fooby12/rqRg2/

+0

이것은 하나의 지시자에 포함될 수 있으면 좋겠지 만 확실히 작동합니다. 링크 기능에서 attrs를 확인하고 오류가 발생했을 때 오류가 발생할 수 있습니까? 나는 이것을 시험해보고 그것이 효과를 낼 수 있는지 알아볼 것입니다. 그 대답은 당신이 실제로 속성을 설정해야하지만, 이것을 확인하기 위해 자신의 코드를 작성해야 할 수 없다고 생각합니다. 필요한 } 로서 기능 (범위, 요소, 바인드합니다) { 경우 (attrs.requiredAttr == 정의) { // 핸들 에러 : 'code' 링크 : – Elliot

+0

는 I은 링크 기능을 이용하여이 작업을 수행하는 방법을 발견 } 'code' – Elliot

+0

예, 링크에서 확인하는 것은 항상 할 수있는 작업입니다. 'angular.isUndefined (attrs.requiredAttr) '를 사용하는 것이 더 안전한 방법입니다. 필자는'require' 속성을 사용하는 경향이 있습니다. 왜냐하면 저는 자체 지시문에서 attr의 유효성을 검사하는 코드를 분리 할 수 ​​있고, angle은 좋은'$ compile' 오류를 던집니다. 또한 더 구체적인 테스트를 작성할 수 있다는 것을 의미하며 누락 된 attr 코드를 기본 지시문의 일부로 테스트하지 않아도됩니다. 정말로 고급 기능을 원한다면, 앵귤러 부트 스트랩을하기 전에 필요한 지시어를 동적으로 빌드 할 수 있습니다 – fooby

관련 문제