2017-12-30 66 views
0

Plunker을 참조하십시오. 문제 : 메인 컨트롤러 내부에서 item-over 지시문을 사용하면 OnOver가 훌륭하게 트리거됩니다. 이게 정상적으로 작동합니다 :Angularjs 중첩 된 지시어 범위

<a href="#" ng-repeat="item in main.Data" item-over="main.OnOver(item)">{{item.Name}}</a> 

그러나 목록보기 지시문 안에 넣으면 제어기의 OnOver 메소드가 실행되지 않습니다. 작동하지 않습니다.

<list-view itemssource="main.Data"> 
    <a href="#" item-over="main.OnOver(item)">{{item.Name}}</a> 
</list-view> 

내가 뭘 잘못 했습니까?

+0

는 지시 코드를 보여 – madhur

+0

내가 itemssource 바인딩 2WAY 필요합니다 ...하지만 난 범위를 설정하면하지 않는 – Derick

답변

1

문제는 listView 지시문이 격리 된 범위를 작성하므로이 지시문의 범위 안에있는 주 항목이나 항목에 액세스 할 수 없다는 것입니다. 부모 범위에 속해 있기 때문에 onOver도 액세스 할 수 없습니다.

특히 listview 지시문에서 itemSource에 대한 양방향 바인딩이 필요하지 않은 경우 return 문에 scope: true을 설정하여 부모 범위를 상속 받도록 설정하십시오. 당신의 지시에

사용 ATTR는 작성하지 않고 ATTR 값에 액세스하는 고립 scope 특성

return { 
    link:function (scope, element, attrs) { 
     scope.itemsSource = attrs.itemsSource 
    } 
} 

당신이 itemsSource 같은 방식으로 전달합니다 - 당신이 당신의 지시자의 값이 지금

<list-view items-source="main.Data">

을 범위와 그들과 함께 놀 수 있습니다.

또는 상위 범위를 inherting 때문에 직접 $ 부모를 사용하여 값에 액세스 할 수 있습니다 - 당신의 지시어 내부 :

link: function (scope, element) { 
    scope.itemsSource = scope.$parent.itemsSource 
} 
plunkr 좀 더 문제가 있었다 확인에, 당신의 plunkr의 작업 예제를 확인 - working plunkr

+0

을 https://plnkr.co/edit/uc8SYR0hfayz4lqnyxlD Plunker에있어 : ​​목록보기 지시어에 사실을 어떻게 그럼 내가 listView 지시어의 Link 함수에서 itemssource를 참조 할 것인가? 그런 다음 listView 지시문의 템플릿에서 itemssource에 바인딩하는 방법은 무엇입니까? – Derick

+0

격리 된 범위를 만들지 않고 속성을 사용하는 방법을 보여주는 답변이 업데이트되었습니다. – madhur

+0

감사합니다! 그것은 작동합니다! 수락 됨 – Derick