2017-05-09 66 views
0

我試圖從$ routeProvider的resolve方法將變量傳遞給將用於此路由的控制器。 但是會發生的是對象正在被解析,但控制器不會等待對象的解析。 這裏是從一小段代碼我使用:將路由中的對象通過路由提供程序傳遞給Controller解決方法

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返回的Promise(我假定您使用$ resource)。你應該這樣做:

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

謝謝你的工作。 但我期待的是,控制器將不會被初始化,直到對象被解析第一次,這是最近更新? – user1874288

+0

@ user1874288你是對的,但對象是「解決」 - 這意味着返回值('returns productsResource.getProductById()'),它返回promise - 並且promise單獨解析。如果你需要注入'productId',就像'return $ route.current.params.id'),它不是一個Promise,它不需要「額外的解決方案」。 –

相關問題