2017-05-09 4 views
0

$ routeProvider의 resolve 메서드에서이 경로에 사용할 컨트롤러로 변수를 전달하려고합니다. 하지만 개체가 해결되고 있지만 컨트롤러가 개체의 해상도까지 기다리지 않습니다. Route Provider를 통해 경로에서 Controller로 개체 전달 resolve

app.config(["$locationProvider", "$routeProvider", "$httpProvider", function ($locationProvider, $routeProvider, $httpProvider) { 
     $locationProvider.hashPrefix(''); 
    .when("/EditProduct/:id", 
      { 
       templateUrl: "App/Products/editProductView.html", 
       controller: "EditProductCtrl as vm", 
       resolve: { 

        product: function (productsResource, $route, $routeParams) { 
         console.log($route.current.params.id); 
         return productsResource.getProductById().get({ id: $route.current.params.id }, function (data) { 
          console.log("inside the resolved function"); 
          console.log(data.Name); 
          return data; 
         }) 
        } 
       } 
      }) 
      .otherwise({ redirectTo: "/" }); 

이 때문에 app.js 문에서 이름으로 로그 메시지가 표시됩니다 : 여기 내가 사용하고있는 코드에서 조각입니다. 컨트롤러로 주입 아마 분해 생성물을 보유하면서 다음과

(function() { 
    "use strict"; 
    angular.module("ProductManagementTool").controller("EditProductCtrl", ["product","productsResource", "currentUser", EditUserCtrl]); 

    function EditProductCtrl(product, productsResource, currentUser) { 
     var editCtrlViewModel = this; 
     console.log("the full name is " + product.Name); 
      editCtrlViewModel.product = product; 
      editCtrlViewModel.title = "Edit: " + product.Name; 


    } 
}()); 

제어부에 로그 메시지가 정의되지 않은 것으로 도시되어있다.

각도 js 1.6.1을 사용하고 있습니다.

답변

0

컨트롤러가 대기하지 않으므로 해결 된 요소는 $ resource에서 반환 한 약속입니다 ($ resource을 사용한다고 가정). 다음과 같이 만들어야합니다.

var editCtrlViewModel = this; 
product.$promise.then(function (element) { 
    editCtrlViewModel.product = element; 
    editCtrlViewModel.title = "Edit: " + element.Name; 
}) 
+0

감사합니다. 하지만 내가 예상했던 것은 컨트롤러가 개체가 먼저 해결 될 때까지 초기화되지 않는다는 것입니다. 최근에 업데이트 되었습니까 ??? – user1874288

+0

@ user1874288 당신은 맞습니다 만, 객체는 "해결"됩니다. 즉, 반환 값 ('return productsResource.getProductById()')을 반환하고 promise를 반환하고 약속이 별도로 해결됩니다. 예를 들어'return $ route.current.params.id '와 같이'productId'를 삽입해야한다면'Promise가 아니므로 "추가 해결"이 필요하지 않습니다. –