Я хочу передать параметр из одного состояния магазина для отображения информации о продукте в состоянии продуктов:
Мое приложение — 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, к узлу подключен маршрутизатор для выражения:
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
Я попытался использовать ui-sref
- a(ui-sref="products({productSku:'{{product.sku}}'})")
в store.jade
для отправки параметра из store_State
в products_State
и, наконец, получил объект обратно из API.
Теперь проблема в том, что node не вернет представление.
В основном я пытаюсь добиться следующего: узел, обслуживающий просмотры клиентов, все представления магазина — магазин/продукт/корзина привязаны к angular app
, обслуживаются через Server.js
, при нажатии на товар в магазине будет перенаправлено на страницу продукта после resolve
информации о продукте от api
. Я получаю информацию о продукте, но не вижу его.
Я искал это, но все решения не работали .... может быть, я плохой :-(
Как я могу это сделать?
ОБНОВЛЕНИЕ-1: вот что происходит:
ОБНОВЛЕНИЕ-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
и отправлю a(href='/products/{{product.sku}}')
из store.jade
, я получу шаблон в маршруте, chrome console
ошибка, которую я получаю: `Error: $injector:unpr Unknown Provider _product ‹- productCtrl
product.ctr.js
.controller('productCtrl', ['_product', function ($rootScope, $http, $stateParams, productFactory, storeFactory, _product) {
Если я отправлю a(ui-sref="products({productSku: product.sku })")
с resolve
, я получу параметры продукта (показаны на снимке WebStorem выше) NO view.
ui-sref
? - person AranS   schedule 07.08.2016ui-sref
была исправлена, но теперь она не перенаправляется на просмотр послеresolve
информации о продукте. - person Jadeye   schedule 09.08.2016a(ui-sref="products({ productSku: product.sku })")
вместоa(ui-sref="products({productSku:'{{product.sku}}'})")
- person Aks1357   schedule 09.08.2016resolve
или любой другой функции на пути. - person Jadeye   schedule 10.08.2016