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を使用しています。
ありがとうございます。 しかし、私は、オブジェクトが最初に解決されるまでコントローラが初期化されないことを期待していましたが、最近更新されましたか? – user1874288
@ user1874288あなたは正しいですが、オブジェクトは "解決済み"です。つまり、戻り値( 'return productsResource.getProductById()')を返し、約束を返し、別途約束が解決されます。たとえば、 'return $ route.current.params.id 'のような' productId'を注入する必要があるならば、それはPromiseではなく、 "追加解決"は必要ありません。 –