Недавно я начал использовать ионную структуру, в ней есть angular js. Чтобы перемещаться между экранами, я использовал $location.path, и он отлично работает. Однако в примере, который я загрузил, я видел, что $state.go используется для перенаправления на какую-либо страницу. Я хотел бы узнать разницу между ними.
В чем разница между $state.go(app.location) и $location.path( "приложение/местоположение" )?
Ответ 1
Служба $location размещена в структуре angular.js и позволяет вам управлять объектом местоположения (аналогично тому, как это делается в чистом javascript). Государственная служба $входит в модуль ui-router и позволяет управлять маршрутами в расширенном режиме во всех режимах управления конечными автоматами.
Если вы используете ui-router, вам следует использовать функцию $state для управления состояниями/маршрутами, потому что государство абстрагирует понятие маршрута, и вы можете изменять физические маршруты без изменения состояний.
Кроме того, при работе в режиме hashbang будет больше проблем, особенно в ваших html-ссылках. В этом случае предпочтительнее использовать ui-sref вместо ng-href (или просто href). На мой взгляд, вы всегда должны думать в терминах состояний, а не путей. Очевидно, что вы можете смешивать сервисы, если знаете, что делаете.
Ответ 2
Спасибо @wilver за ответ. Когда я углубился в angular и изучил различные способы структурирования моих проектов, я понял, что эти состояния и пути лучше. И да, я нашел состояния намного лучше, чем пути.
$state.go, который поставляется с $stateProvider
- поставщиком ui-router
, будет работать на основе имен состояний. Основное различие между ранее встроенным (теперь вам нужно включить ngRoute
) маршрутизатором и состояниями заключается в том, что "государства могут иметь вложенные состояния, но с маршрутизатором это невозможно". И я вдруг понял, что весь Ионная структура возможна из-за этой концепции - я смог понять это, работая над веб-приложением angular на основе ngRoute
и ионного приложения на основе ui-router.
Ионный работает с приложением как основным состоянием, а все остальные экраны определяются как его под-состояния. Вот почему вы видите app.screen1
, app.screen2
внутри $stateProvider
в app.js.
Итак, когда у вас есть маршруты, вы используете $location.path("<routeUrl>")
и
когда у вас есть состояния, вы используете $state.go("<stateName>")
Ответ 3
Я использую ионное и одно из различий, которое я наблюдал, но еще не понял, почему $location.path
намного медленнее, чем $state.go