2013-06-23 2 views
3

"하위"상태의 데이터가 필요하며 가져 오기 위해 노력하고 있습니다. 문제는 매번 $ rootScope에서 데이터를 가져 오길 원한다는 것입니다.각도 UI 라우터에서 해결 appStates가 범위 데이터를 전달하지 않음

그래서 여기에 - 내 문제의 개요.

나는 주 공급자를 사용하고 있습니다. 내가 할 모든이가 rootScope.lessons 그래서 난보기를 채울 수있는 개체를 채우기 위해 작동이 dashboardAPI.lessons();

services.factory('dashboardAPI', ['$rootScope', '$q', '$http', function(rootScope, $q, $http) { 

    function load(path) { 
    return $http.get("/app/data" + path); 
    } 

    return { 
    lessons: function() { 
     var deferred = $q.defer(); 

     if (rootScope.lessons == undefined) { 
     load("/getLessons.json").success(function (data) { 
      rootScope.lessons = data.result; 
      deferred.resolve(data.result); 
     }). 
     error(function() { 
      console.log("Problem getting lessons"); 
     }); 
     } 
     else 
     deferred.resolve(rootScope.lessons); 
     return deferred.promise; 
    } 
    }; 

}]); 

를 호출 할 수있는 CreateCtrl에서

.state('dashboard.create', { 
     // parent: 'dashboard', 
     url: '/create', 
     views: { 
      '': { 
      templateUrl: "/app/partials/create.html", 
      controller: "CreateCtrl", 
      } 
     } 
     }) 

: 그래서 여기 내 첫 번째 상태입니다. 또 다른 서비스를 호출하는 것이 컨트롤러에서

.state('dashboard.create.lessons', { 
     // parent: 'create', 
     url: '/lessons', 
     views: { 
      'curriculum': { 
      templateUrl: "/app/partials/create.lessons.html", 
      controller: ['curriculumHash', function(curriculumHash){ 
       curriculumHash.sstHash(); 
      }], 
      }, 
     } 
     }) 

:

그런 다음이 같은 서브 스테이트있다

services.factory('curriculumHash', ['$rootScope', '$q', 'dashboardAPI', function(rootScope, $q, dashboardAPI) { 

    return { 
    sstHash: function() { 
     var deferred = $q.defer(); 

     if (rootScope.sstopicsArray == undefined) { 
     //Get a promise back from API call 
     dashboardAPI.lessons().then(function(data) { 
      rootScope.sstopicsArray = []; 
      var x = data.Topics; 
      for (var i=0; i<x.length; i++) { 
      var y = x[i].Subtopics; 
      for (var j=0; j<y.length; j++) { 
       var z = y[j].Subsubtopics; 
       for (var k=0; k<z.length; k++) { 
       rootScope.sstopicsArray.push({ 
        Id: z[k].Id, 
        Name: z[k].Name, 
        Description: z[k].Description, 
        List: z[k].Lessons 
       }); 
       } 
      } 
      } 
      return deferred.resolve(); 
     }); 
     } 
     else 
     return deferred.resolve(); 
    } 
    }; 
}]); 

는 그리고 이것은 또한 작동합니다. 배열을 채울 때 정렬 가능한 jquery 목록을 사용하여 뷰를 채울 수 있습니다. 즉, 나는 매우 긴 객체 (위에서의 수업)를 가져 와서 더 간단한 해시 배열로 분해해야합니다.

나는 내가 그 새로운 해시에서 하나의 개체를 찾을 수있는 하나 개 이상의 하위 (서브) 상태를 필요 : 나는 창을 내 컴퓨터를 척하려는

지금, 여기에있다.

나는 해상도를 어떻게 사용하는지에 대한 예의를 찾기 위해 높고 낮음을 검색했습니다. 상관없이 dashboard.create.lessons.detail 상태의 컨트롤러에 정지 시간을 지정하면 정의되지 않은 객체의 길이를 얻을 수 없으므로 getData는 정의되지 않았으며 chrome은 오류를 발생시킵니다.

누구나 팁을 제안 할 수 있습니까? 모델과 함께 놀고 싶어서이 물건이 정말로 필요합니다. 다른 사람이 각도 UI 사이트에있는 것보다 좀 더 철저한 해결 문서를 참조 할 수 있다면 도움이 될 수 있습니다. 감사!

답변

3

내가 끝낸 것은 내 커리큘럼에서 약속을 되 돌리는 것입니다. 해시 서비스. 그런 다음 약속이 해결 될 때까지 컨트롤러가 시작되지 않도록 appStates.js에 해결 방법을 추가합니다. 그래서 같이

는 :

.state('dashboard.create', { 
    // parent: 'dashboard', 
    url: '/create', 
    views: { 
     '': { 
     templateUrl: "/app/partials/create.html", 
     resolve:{ 
      'curriculumHashPromise':function(curriculumHash){ 
      return curriculumHash.promise; 
      } 
     }, 
     controller: ['$rootScope', function(rootScope){ 
      //I will have access to all curriculumHash methods as well as dashBoard 
     }], 
     } 
    }, 

나는 내 대답을 찾기 위해이 question here 언급했다. 누구에게 더 자세한 정보가 필요하면 알려주지 만 참고 자료는 대단히 유용합니다.

+0

답을 게시 해 주셔서 감사합니다. 처음으로 도형꾼들이 만나는 일반적인 시나리오처럼 보입니다! :) – Whizkid747

관련 문제