2014-07-23 4 views
0

에 대한 중첩 된 객체 정보에 액세스하고 이런 일이하기 : 객체의는 어떻게 각도에서 응용 프로그램을 쓰고 있어요 중첩 된 기능

$scope.items = [ 
    {'name':'someName', 
    'title': 'someTitle', 
    'filter': function(item){ 
     Filters.setTableTitle(this.title); //cannot get title 
     ... 
     } 
    }, 
    {'name':'someName', 
    'title': 'someTitle', 
    'filter': function(item){ 
     Filters.setTableTitle(this.title); 
     ... 
     } 
    } 
]; 

배열입니다. 각 객체의 일부는 함수이고, 함수 내부에서 그 객체 자체의 제목을 잡는 함수를 호출하여 나머지 응용 프로그램에 더 큰 범위로 전달합니다.

그러나 각 개체의 제목을 가져올 수 없습니다.

여기에서 사용하려면 어떻게해야합니까?

감사합니다.

업데이트는 여기에 (매우 비슷한) 위의 코드를 사용하여 내 HTML입니다. 코드를 사용하여 버튼을 만듭니다. 각 개체의 filter 부 내에 유지

<p ng-repeat="link in items"> 
    <block class="button" href="{{link.URL}}" title="{{link.title}}"> 
     <a class="hrefLink" href="{{link.URL}}" ng-click="Filters.setFilter(link.filter, link.title)"> 
      {{link.name}} 
     </a> 
    </block> 
</p> 

함수는 다음 DOM을 갱신 Filters.setFilter()로 전달되는 정보를 반환한다.

Filters.setFilter는()

service.setFilter = function(filter, title){ 
    service.searchTerm = ''; 
    $spMenu.hide(); //close nav if open 
    service.selectedFilter = filter; 
    service.setTableTitle(title); //this does the job 
}; 

나는이 기능이 작동하는 방식을 재 배열했습니다, 지금은 단순히 다른 기능에 제목에 전달합니다. 이것은 을 원하지만 여전히 초기 질문을 해결할 수없는 작업을 처리합니다. 오브젝트 내부에서 오브젝트의 일부에 어떻게 액세스합니까?

+0

이 아마로 시작하는 것은 좋지 않습니다. 대신 서비스 나 공장을 만들 수 있습니까? 서비스/공장으로 만들면 나중에 유용 할 수있는 다른 서비스/공장을 쉽게 추가 할 수 있습니다. 예를 들어, localStorageService ... –

+0

html 코드는 어떻게 생겼습니까? 그것은 반복에 있습니까? – PSL

+0

이것은 ng-repeat를 통해 소수의 버튼을 생성하는 데 사용됩니다. 필터 기능은 버튼을 클릭 할 때 호출됩니다. 버튼을 클릭하면 새보기를로드하는 대신 필터가 변경되고 해당 테이블이 다시 정렬됩니다. 이 정보 자체는 컨트롤러를 넘을 필요는 없지만 다른 곳에서 사용할 수 있도록 여기에서 팩토리로 제목을 가져 오려고합니다. (내 필터 공장에 전달하려고합니다.) – user2494584

답변

0

잘 모르겠습니다. 그렇기 때문에 확실히 더 좋은 soultion이 될 수 있습니다. 적절한 개체를 포함하지 않는 다른 곳과 this라고하면 당신은 모든 개체를 열거 할 수 있습니다,

$scope.items[x].filter(item); 

을하고 여기에 기능을 결합 :

당신이 함수를 직접 호출 할 경우, 그냥이처럼 쓰기 :

for (var i = 0; i < $scope.items.length; ++i) { 
    var item = $scope.items[i]; 
    item.filter = item.filter.bind(item); 
} 

편집 :

당신은 두 가지 선택이있다.

<p ng-repeat="link in items"> 
    <block class="button" href="{{link.URL}}" title="{{link.title}}"> 
     <a class="hrefLink" href="{{link.URL}}" ng-click="Filters.setFilter(link.filter.bind(link))"> 
      {{link.name}} 
     </a> 
    </block> 
</p> 

을 또는 당신은 당신을 위해 그것을 할 기능을 편집 할 수 있습니다 : 우선은 HTML의 기능을 결합 할 수

<p ng-repeat="link in items"> 
    <block class="button" href="{{link.URL}}" title="{{link.title}}"> 
     <a class="hrefLink" href="{{link.URL}}" ng-click="Filters.setFilter(link)"> 
      {{link.name}} 
     </a> 
    </block> 
</p> 

service.setFilter = function(link){ 
    service.searchTerm = ''; 
    $spMenu.hide(); //close nav if open 
    service.selectedFilter = link.filter.bind(link); 
}; 
관련 문제