javascript - $state.go method not switching to other state - angularjs - Stack Overflow

admin2025-04-19  0

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.

Share Improve this question edited Jun 9, 2015 at 20:26 PLNech 3,1773 gold badges26 silver badges54 bronze badges asked Oct 10, 2014 at 13:54 sabarisabari 2,6255 gold badges32 silver badges51 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 3

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;
});
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1745076708a283611.html

最新回复(0)