2016-12-08 8 views
3

Я новый студент angularjs. Я использую государственный провайдер в своем проекте, я не хочу его менять. Потому что код сделан.

Вот мой код:

function config($stateProvider, $urlRouterProvider) { 



$urlRouterProvider 
.when('/SecondMain', '/SecondMain/OtherPageOne') 
.when('/Main', '/Main/PageOne') 
.otherwise("/notfound") 

$stateProvider 
    .state('Main', { 
     abstract: true, 
     url: "/Main", 
     templateUrl: "/templates/Common/Main.html" 
    }) 
    .state('SecondMain', { 
     abstract: true, 
     url: "/SecondMain", 
     templateUrl: "/templates/Common/SecondMain.html" 
    }) 
    .state('notfound', { 
     url: "/NotFound", 
     templateUrl: "/templates/Common/NotFound.html" 
    }) 
    .state('Main.PageOne', { 
     url: "/Main/PageOne", 
     templateUrl: "/templates/Main/PageOne.html" 
    }) 
    .state('Main.PageTwo', { 
     url: "/Main/PageTwo", 
     templateUrl: "/templates/Main/PageTwo.html" 
    }) 
    .state('SecondMain.OtherPageOne', { 
     url: "/SecondMain/PageOne", 
     templateUrl: "/templates/SecondMain/OtherPageOne.html" 
    }) 
    .state('SecondMain.OtherPageTwo', { 
     url: "/SecondMain/PageTwo", 
     templateUrl: "/templates/SecondMain/OtherPageTwo.html" 
    }) 
angular 
    .module('inspinia') 
    .config(config) 
    .run(function ($rootScope, $state) { 
     $rootScope.$state = $state; 
    }); 
} 

Я хочу, чтобы логика, как это: Если пользователя сайте:

/Главная/PageThree

Эта страница не существует, но стартовый адрес пользователя с

/Main

так, что ему нужно пойти ->/Главная/PageOne

если пользователь поставил:

/Ма/PageOne

/Ма не существует, пользователь начинает URL совершенно неправильно, поэтому он переходит к ->/Notfound. В принципе, если пользователь поставил/Main/WRONG_LINK, он перешел в/Main/PageOne. И если он не начнет с/Main, он отправится в NotFound.

Может ли кто-нибудь мне помочь?

Большое спасибо !!!

+0

Где иначе ?? – Aravind

+0

$ urlRouterProvider .when ('/ Main', '/ Main/PageOne') .otherwise ("/ notfound") У меня уже было иначе. – Johnson

+0

Если это, пожалуйста, обновите сообщение. – Aravind

ответ

0

У вас не хватает этой конфигурации

$urlRouterProvider.otherwise('/NotFound'); 

Просто добавьте эту строку, если соответствующий маршрут не найден, то он будет перенаправлять вас к/NotFound URL

+0

$ urlRouterProvider .when ('/ Main', '/ Main/PageOne') .otherwise ("/ notfound") У меня уже было иначе. Но я хочу такую ​​логику, как я сказал: Если пользователь поставил: **/Главная/PageThree ** <Эта страница не существует, но URL-адрес запуска пользователя с/Main, так что ему нужно перейти - >/Main/PageOne /Ma/PageOne/Notfound В принципе, если пользователь поставил **/Main/WRONG_LINK **, он идет в/Main/PageOne. И если он не начнет с/Main, он отправится в NotFound. Спасибо за aswer! – Johnson

0

Этот ответ вдохновлен this answer.

Прежде всего, вам нужно будет сделать состояние Main не абстрактным, чтобы его можно было посетить. Затем вы можете написать конфигурации относительно того, где вы хотите перенаправить (например, я использовал redirectTo с государством):

$stateProvider 
    .state('Main', { 
     redirectTo: "Main.PageOne", 
     url: "/Main", 
     templateUrl: "/templates/Common/Main.html" 
    }) 
// ... Rest of code 

Таким образом, всякий раз, когда URL будет изменен на /Main, это состояние будет активизироваться. Вторая конфигурация будет создать перехватчик для $stateChangeStart события следующим образом:

angular 
    .module('inspinia') 
    .config(config) 
    .run(function ($rootScope, $state) { 
    $rootScope.$on('$stateChangeStart', function(evt, to, params) { 
     if (to.redirectTo) { 
     evt.preventDefault(); 
     $state.go(to.redirectTo, params, { location: 'replace' }) 
     } 
    }); 
    }); 

Теперь, если URL, как /Ma/* хита, он автоматически будет перенаправлен на /NotFound. И если попадет URL-адрес, например, /Main, он будет перенаправлен на /Main/PageOne.

Вы можете следить за дальнейшим обсуждением on this link для любого поиска неисправностей.

+0

Мне нужно абстрактное состояние государства. Потому что у меня есть 2 абстрактных состояния. для этого вопроса я ставлю только одно абстрактное состояние. я уже спрашивал что-то вроде этого раньше. Я думаю, что другой пользователь лучше понял мой вопрос. посмотрите пожалуйста: http://stackoverflow.com/questions/40864366/angularjs-when-and-otherwise-with-ui-rout – Johnson

0

Очевидно читать высказывания ниже

Почему вы используете эту линию?

when('/Main', '/Main/PageOne') 

Для вашей проблемы перенаправления, взгляните на ниже состоянии

.state('Main', { 
    abstract: true, 
    url: "/Main", 
    templateUrl: "/templates/Common/Main.html" 
}) 

аннотация: истинный ==> Это означает, что это особое состояние является абстрактным, который никогда не может быть активирован без его ребенка.

ИСТОЧНИК: ui-router js code. См. Нижеприведенный фрагмент

Поскольку у вас есть это main state as abstract, вы перенаправлены в противном случае.

enter image description here

Надежда это

+0

Привет! У меня есть. Когда у меня есть 2 абстрактных состояния. Я уточню свой вопрос. Я сделал это, потому что думал, что это легче понять. ОБНОВЛЕНО. – Johnson

+0

Можете ли вы связаться со мной в fb? – Aravind

+0

Взгляните сейчас, если вы можете мне помочь, пожалуйста =) – Johnson