In my controller, I have $state.go('purchase');
, but am having the following error :
Error: Could not resolve
'purchase'
from state ''.
But initially, I defined url ''
to '/home'
in my file states.js, which goes to state 'home'. Why is my state transition not happening? Please let me know where I am wrong.
states.js
/**
* Dashboard routes.
*/
define(['./templates'], function(templates) {
var mod = angular.module("item.states", ["ui.router"]);
console.log("Inside item home states");
var StateProvider = function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.when('', '/home');
$stateProvider
.state("item", {
url: '/home',
template: templates.home,
controller : 'controller.item.home.main'
})
.state("purchase", {
url: '/purchase',
template: templates.purchase,
controller : 'controller.item.home.main'
});
}
StateProvider.$inject = ["$stateProvider", "$urlRouterProvider"];
mod.config(StateProvider);
return mod;
});
controller.js
function _purchase(_event){
console.log("Clicked purchase button");
$state.go('purchase');
}
main.js
define(['./controllers','./states'], function(controllers,states) {
var mod = angular.module("item.home", ['mon.services.ItemService',
'mon.filters.format']);
mod.controller('controller.item.home.main', controllers.main);
console.log("Inside item home main");
return mod;
});
my server side jade
extends ../layouts/default
block content
div(ng-controller="controller.item.home.main as main" ng-init="item= #{JSON.stringify(item)}")
.masterhead.segment
.ui.page.grid.stackable
.row.ui.basic.segment
.four.wide.column.ui.center.aligned
img.ui.image.rounded(src="/images/itemicon.png")
h2() !{item.name} - !{item.activeseason.name}
.twelve.wide.column
.ui.small.orange.button(id="purchaseBtn" ng-click="purchase($event)”)
| Purchase
div.ui.page.grid(ui-view)
Thanks.
In my controller, I have $state.go('purchase');
, but am having the following error :
Error: Could not resolve
'purchase'
from state ''.
But initially, I defined url ''
to '/home'
in my file states.js, which goes to state 'home'. Why is my state transition not happening? Please let me know where I am wrong.
states.js
/**
* Dashboard routes.
*/
define(['./templates'], function(templates) {
var mod = angular.module("item.states", ["ui.router"]);
console.log("Inside item home states");
var StateProvider = function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.when('', '/home');
$stateProvider
.state("item", {
url: '/home',
template: templates.home,
controller : 'controller.item.home.main'
})
.state("purchase", {
url: '/purchase',
template: templates.purchase,
controller : 'controller.item.home.main'
});
}
StateProvider.$inject = ["$stateProvider", "$urlRouterProvider"];
mod.config(StateProvider);
return mod;
});
controller.js
function _purchase(_event){
console.log("Clicked purchase button");
$state.go('purchase');
}
main.js
define(['./controllers','./states'], function(controllers,states) {
var mod = angular.module("item.home", ['mon.services.ItemService',
'mon.filters.format']);
mod.controller('controller.item.home.main', controllers.main);
console.log("Inside item home main");
return mod;
});
my server side jade
extends ../layouts/default
block content
div(ng-controller="controller.item.home.main as main" ng-init="item= #{JSON.stringify(item)}")
.masterhead.segment
.ui.page.grid.stackable
.row.ui.basic.segment
.four.wide.column.ui.center.aligned
img.ui.image.rounded(src="/images/itemicon.png")
h2() !{item.name} - !{item.activeseason.name}
.twelve.wide.column
.ui.small.orange.button(id="purchaseBtn" ng-click="purchase($event)”)
| Purchase
div.ui.page.grid(ui-view)
Thanks.
use transition to
$state.transitionTo('purchase')
and change syntax error in yor code
url: '/purchase,
to
url: '/purchase',
I'm not sure the syntax you are using and why defining your routes inside a template, but I'd remend another way to do it, create a file on the 'module folder' or your root folder and define your routes in a more 'general' way like the following:
'use strict';
//Setting up route
angular.module('mainModule').config(['$stateProvider',
function($stateProvider) {
// main module state routing
$stateProvider.
state('home', {
url: '/home',
templateUrl: 'controller.item.home.main', //I'd remend to use plain html files, instead something rendered in the server
controller:'HomeController'
}).
state('purchase', {
url: '/purchase',
templateUrl: 'templates.purchase',
controller: 'purchaseController'
});
}
]);
I guess in your home controller:
angular.module('mainModule').controller('HomeController', ['$scope','$state',
function($scope,$state) {
$scope.onclick = function(){
$state.go('purchase');
};
}]);
on the other side your states are not related to your server side at all.
The error was because, In my main.js - I missed to include the module 'item.states'
define(['./controllers','./states'], function(controllers,states) {
var mod = angular.module("item.home", ['mon.services.ItemService',
'mon.filters.format','item.states']);
mod.controller('controller.item.home.main', controllers.main);
console.log("Inside item home main");
return mod;
});