Angularjs 通过路由提供程序解析将对象从路由传递到控制器

Angularjs 通过路由提供程序解析将对象从路由传递到控制器,angularjs,route-provider,Angularjs,Route Provider,我试图将$routeProvider的resolve方法中的变量传递给将用于此路由的控制器。 但是发生的事情是对象正在解析,但是控制器不会等到对象解析。 以下是我正在使用的代码片段: app.config(["$locationProvider", "$routeProvider", "$httpProvider", function ($locationProvider, $routeProvider, $httpProvider) { $locationProvider.ha

我试图将$routeProvider的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;


    }
}());
而控制器中的日志消息显示为未定义


我正在使用angular js 1.6.1。

控制器不会等待,因为解析元素是$resource返回的承诺(我假设您使用$resource)。你应该这样做:

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

谢谢,这很有效。但我所期望的是,在首先解析对象之前,控制器不会初始化,这是最近更新的吗?@user1874288您是对的,但对象是“已解析的”——这意味着返回值(
return productsResource.getProductById()
)并返回承诺——而承诺是单独解析的。例如,如果您需要注入
productId
return$route.current.params.id)
这不是承诺,也不需要“额外的解析”。