2014-06-12 2 views
0

매우 괴상한 문제가 있습니다. 문제를 해결할 방법을 찾지 못했습니다.angularjs : ng-repeat시 스코프 멤버를 설정하는 동안 문제가 발생했습니다.

시스템 메뉴에서 $ category.categoryId를 사용하여 현재 카테고리를 가리 킵니다.

ng-repeat through 카테고리에서 ng-click을 사용하여 현재 카테고리를 설정했지만 작동하지 않습니다. 독립형 태그를 추가하면 더욱 이상합니다.

<!-- click manages to inc --> 
<p ng-click="categoryId = categoryId+1">++ : {{categoryId}}</p> 

<!-- click doesn't manage to inc --> 
<p 
    ng-repeat="c in categories" 
    ng-click="categoryId = categoryId+1"> 
     {{$index}} : {{categoryId}} 
</p> 

어떤 생각을 다음과 같이

코드는 무엇입니까?

+1

컨트롤러를 게시 할 수 있습니까? 아마도 ng-repeat가 새로운 범위를 생성하기 때문에 문제 일 것입니다. – klode

+0

죄송하지만 그것은 나를 위해 작동합니다 ... 나는 카테고리 대신 테스트 배열을 사용했습니다. http://plnkr.co/edit/JchT0GrkVjVUSzsLctxO?p=preview – Srinath

+0

@klode 새로운 범위를 만들고있는 것으로 들립니다. 나는 바이올린을 조롱하려고했지만, 아아, 내 피들에서 작동합니다. 내 컨트롤러가 큽니다. 내가 본 한 가지는 class = "ng-scope"가 repeater에 있지만 standalone p 태그에는 없다는 사실입니다. 무슨 뜻이에요? –

답변

0

내가보기에 하나의 사실은 클래스 "ng-scope"가 중계기에는 있지만 독립형 p 태그에는 없다는 사실입니다. 무슨 뜻이에요?

겨-반복

카테고리 ID는 부모 범위를 참조해야 새로운 범위를 만듭니다.

<!-- click doesn't manage to inc --> 
    <p 
     ng-repeat="c in [1,2,3]" 
     ng-click="$parent.categoryId = $parent.categoryId+1"> 
      {{$index}} : {{$parent.categoryId}} 
    </p> 
+0

맞습니다. 문제가 해결되었습니다. 수업 : ng-scop 클래스를 보면 새로운 스코프가 생성되었음을 의미합니다. 맞습니까? 한 가지 질문 : 왜 새로운 범위가 만들어 집니까 ?? –

+0

네, 이런 종류의 물건을 디버깅하는 한 가지 팁은 CSS 클래스 .ng-scope를 만들고 빨간색 테두리를 추가하는 것입니다. 이렇게하면 현재 페이지의 모든 범위를 볼 수 있습니다. – mpm

2

ng-repeat는 새로운 범위를 만듭니다. 다음과 같이이에 대한 가능한 해결책 해당 개체의 속성으로이 "카테고리 ID를"컨트롤러에서 개체를 만든 다음 매핑하는 것입니다

문제의 원인이 될 수 있습니다

//In Controller var dummyObj = new Object(); dummyObj.categoryId = //some value

//In View <p ng-repeat="c in categories" ng-click="dummyObj.categoryId = dummyObj.categoryId+1"> {{$index}} : {{dummyObj.categoryId}} </p>

이것은 직면 한 문제를 해결합니다.

+0

알았습니다. 그러나이 경우 왜 새로운 범위가 dummyObj.categoryId에 영향을 미치지 않는가? hg-repeat와 관련하여 누락 된 규칙이 하나있는 것 같습니다. 이 피들 (http://jsfiddle.net/stephanedeluca/8UxY9/)에서는 프로젝트와 동일한 문제를 만들지 않았습니다. 왜? –

+0

Angular가 범위 변수 및 객체를 처리하는 방식과 관련이 있습니다. 새 범위가 만들어지면 범위 변수를 하위 범위로 푸시합니다. 따라서 현재 범위의 $$ childTail 속성에서 이러한 변수를 찾을 수 있습니다. 그러나이 동작은 범위 개체에 대해 존재하지 않습니다. –

+0

같은 문제에 대한 훌륭한 답을 발견했습니다. 범위 지정이 작동하는 이유와 방법에 대한 자세한 내용은 다음 링크를 참조하십시오. http://stackoverflow.com/a/14049482/802651 –

관련 문제