2017-05-09 7 views
0

Ich versuche, eine Variable von der resolve-Methode des $ routeProvider an den Controller zu übergeben, der für diese Route verwendet wird. aber was passiert, ist das Objekt wird aufgelöst, aber der Controller wartet nicht bis zur Auflösung des Objekts. Hier ist ein Ausschnitt aus dem Code ich verwende:Ein Objekt von der Route an den Controller über den Route Provider übergeben. 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: "/" }); 

so die Log-Nachricht mit dem Namen aus der app.js Anweisung gezeigt. während der Regler die angeblich aufgelöst Produkt injiziert wie folgt hat:

(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; 


    } 
}()); 

während die Protokollmeldung in der Steuerung wird als undefiniert gezeigt.

ich benutze angular js 1.6.1.

Antwort

0

Controller wird nicht warten, weil aufgelöstes Element ein Versprechen ist, das von $ resource zurückgegeben wird (ich nehme an, dass Sie $ resource verwenden). Sie sollten so etwas machen:

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

Danke, es funktioniert. aber was ich erwartet habe ist, dass der Controller nicht initialisiert wird, bis das Objekt zuerst aufgelöst wird, wurde das kürzlich aktualisiert ??? – user1874288

+0

@ user1874288 Sie haben Recht, aber das Objekt ist "aufgelöst" - was bedeutet, dass es einen Wert zurückgegeben hat ('return productsResource.getProductById()') und es gibt Versprechen zurück - und Versprechen wird separat gelöst. Wenn Sie beispielsweise 'productId' wie 'return $ route.current.params.id 'injizieren müssen, ist dies kein Versprechen und es ist keine zusätzliche Lösung erforderlich. –

Verwandte Themen