Я хочу передать параметр из одного состояния хранилища в информацию о продукте на дисплее в состоянии продукта:
Мое приложение - 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);
Продукт Factory
function getProduct(sku) {
return $http.get('http://localhost:3000/api/products/' + sku );
}
Поскольку я использую MEAN Stack, node имеет маршрутизатор, прикрепленный для выражения:
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 не вернет представление.
В основном я пытаюсь достичь:
Node просмотр клиентских представлений, все виды хранилища - хранилище/товар/корзина прикреплены к angular app
через Server.js
, при нажатии на продукт магазина перенаправление на страницу продукта после resolve
информации о продукте из api
.
Я получаю информацию о продукте, но не получаю вид продукта.
Я посмотрел его, но все решения не сработали... может быть, мое плохое:-(
Как я могу это сделать?
UPDATE-1: это то, что происходит:
ОБНОВЛЕНИЕ-2:
Когда я передаю элемент управления angular
, у меня есть express
маршрутизация меню, а angular stateProvider
маршрутизация/соединение views
- controllers
.
Основной вид, что загружает сам store
:
app.js - сохранить маршрут
$stateProvider
.state('store', {
url: '/store',
templateUrl: 'store/store',
controller: 'storeCtrl'
})
server.js(express)
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;
});
Это просто отлично!
Но когда я пытаюсь отправить представление param productSku
из store
в представление product
и попробуйте resolve
передать параметры продукта обратно в product
, что там, где он перестает работать, либо я получаю view ИЛИ я получаю params.
Я пробовал разные способы resolve
, все они приводят к тому же - просмотр OR параметров продукта.
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
, которую я получаю: `Ошибка: $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.