2017-05-09 15 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によって返されたPromiseです(私は$ resourceを使用します)。

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

ありがとうございます。 しかし、私は、オブジェクトが最初に解決されるまでコントローラが初期化されないことを期待していましたが、最近更新されましたか? – user1874288

+0

@ user1874288あなたは正しいですが、オブジェクトは "解決済み"です。つまり、戻り値( 'return productsResource.getProductById()')を返し、約束を返し、別途約束が解決されます。たとえば、 'return $ route.current.params.id 'のような' productId'を注入する必要があるならば、それはPromiseではなく、 "追加解決"は必要ありません。 –

関連する問題