【发布时间】:2016-08-07 12:33:20
【问题描述】:
我希望将一个商店状态的参数传递给 products-state 中的显示产品信息:
我的应用 - storeApp
.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('store', {
url: '/store',
templateUrl: 'store/store',
controller: 'storeCtrl'
})
.state('products', {
url: '/products/:productSku',
templateUrl: 'store/product',
controller: 'productCtrl',
resolve: {
productResource: 'productFactory',
_product: function(productResource, $stateParams){
return productResource.getProduct($stateParams.productSku);
}
}
Store.jade
a(href='/products/{{product.sku}}')
产品控制器
.controller("productCtrl", function ($rootScope, $http, $stateParams, productFactory, storeFactory) {
//.controller('productCtrl', ['_product', function ($scope, $rootScope, storeFactory, _product) {
console.log($stateParams.productSku);
产品工厂
function getProduct(sku) {
return $http.get('http://localhost:3000/api/products/' + sku );
}
由于我使用的是 MEAN Stack,因此 node 已将路由器连接到 express:
Server.js
const storeController = require('./controllers/store');
server.get('/store/product', passportConfig.isAuthenticated, storeController.getProductPage);
Store.js
exports.getProductPage = (req, res) => {
res.render('store/product', {
title: 'PP',
angularApp: 'storeApp'
})
}
我尝试返回_product,但得到Unknown provider: _productProvider <- _product <- productCtrl
我尝试在store.jade 中使用ui-sref - a(ui-sref="products({productSku:'{{product.sku}}'})") 将参数从store_State 发送到products_State 并最终从API 中返回一个对象。
现在的问题是节点不会返回视图。
基本上我想要实现的是:
服务客户端视图的节点,所有商店视图 - 商店/产品/购物车都附加到通过Server.js 服务的angular app,单击商店产品将在resolve 来自api 的产品信息之后重定向到产品页面。
我正在获取产品信息,但没有获取产品视图。
我查了一下,但所有解决方案都不起作用....也许是我的错 :-(
我该怎么办?
更新-2:
当我将控件传递给angular 时,我有express 路由菜单,angular stateProvider 路由/将views 连接到controllers。
加载的主视图是store 本身:
app.js - 存储路径
$stateProvider
.state('store', {
url: '/store',
templateUrl: 'store/store',
controller: 'storeCtrl'
})
server.js(快递)
server.get('/store', passportConfig.isAuthenticated, storeController.getStorePage);
store.js
exports.getStorePage = (req, res) => {
res.render('store/store', {
title: 'S--tore',
angularApp: 'storeApp'
});
}
store.ctr.js
angular.module("storeApp")
.controller("storeCtrl", function($rootScope, $http, storeFactory) {
var products;
storeFactory.getProducts().then(function(_products) {
products = _products.data;
$rootScope.products = products;
});
加载就好了!
但是当我尝试将参数 productSku 从 store 视图发送到 product 视图并让 resolve 将产品参数发送回 product 视图时它停止工作,要么我得到查看或我得到参数。
我尝试了resolve 的不同方式,它们的结果都相同 - 查看或产品参数。
app.js - 产品路线
.state('products', {
url: '/products/:productSku',
templateUrl: 'store/product',
controller: 'productCtrl',
resolve: {
_product: function ($stateParams, $state, $http) {
return $http.get('http://localhost:3000/api/products/' + $stateParams.productSku );
//return productResource.getProduct($stateParams.productSku)
}
}
})
如果我删除resolve 并从store.jade 发送a(href='/products/{{product.sku}}'),我会在路由中得到模板,chrome console 我得到的错误是`Error: $injector:unpr Unknown Provider _product
product.ctr.js
.controller('productCtrl', ['_product', function ($rootScope, $http, $stateParams, productFactory, storeFactory, _product) {
如果我发送 a(ui-sref="products({productSku: product.sku })") 和 resolve 我会得到产品参数(如上面的 WebStorem 快照所示)没有视图。
【问题讨论】:
-
你有
ui-sref的错误吗? -
@AranS:
ui-sref问题已得到修复,但现在在resolve产品信息之后不会重定向到查看 -
@Jadeye - 尝试使用
a(ui-sref="products({ productSku: product.sku })")而不是a(ui-sref="products({productSku:'{{product.sku}}'})") -
@Aks1357,同样的,这不是当前的问题,
resolve或任何其他功能在路上。 -
状态定义对象可以具有 params 属性,我们可以将具有该参数名称的任何对象传递给该状态。
标签: javascript angularjs angular-ui-router pug mean-stack