2015-08-05 3 views
4

В свете у меня есть ссылка, чтобы выбрать начальное местоположение, как показано ниже:Как вернуться к предыдущему виду с параметром в ионном?

<a href="#/location/start"><input type="text" ng-model="placeStart" placeholder="place to start"></a> 
 
<input type="text" ng-model="weight" placeholder="goods weight">

и на странице местоположения, я выбрать место, однако, когда я использую $ ionicHistory. goBack(), я не смог передать «место» обратно в предыдущее представление. Я также не хочу использовать state.go ('previous view'), чтобы передать «место», потому что таким образом я потеряю другую входную информацию в предыдущем представлении.

+0

Просьба уточнить, что вы хотите. –

+0

Почему вы помещаете текстовое поле в тег href? –

+0

Хотите узнать, работает ли какой-либо из параметров в моем ответе? –

ответ

0

Существует три варианта, которые сразу приходят на ум. $ rootScope, localStorage и использование маршрутизации не goBack().

Если вам нужно значение с одного вида в другом, и это полностью отдельные контроллеры и т. Д., Тогда вам нужно пройти их.

Вы можете создать и затем поместить значение в $ rootScope.globals или подобное.

Вы можете сохранить значение в localStorage перед отправкой пользователя обратно.

Вы можете правильно перенаправить маршрут, который позволяет вводить значения в URL-адрес и по-прежнему показывать страницу с подозрительными. Например тот же маршрут и без значений, установленных, используя - или 0 для не устанавливается, в зависимости от типа данных:

/an/example/route/-/-/ 
/an/example/route/0/0/ 
/an/example/route/123/456 

Update:

Существует на самом деле четвертый путь, где вы можете передавать данные между контроллеры, использующие $ broadcast и $ on. Передача происходит в передающем контроллере, а $ на прослушивании в приемном контроллере (-ах), чтобы вы могли отправить обновление значениям/объекту и т. Д. $on and $broadcast in angular

+0

Все это настоящие и жизнеспособные предложения. Я добавил ответ с моим предпочтительным дополнительным способом использования объекта службы. –

0

Это зависит от вашей ситуации, но если вы не хотите, чтобы сохранить состояние после перезагрузки страницы, которое было бы полезно для localStorage, но, скорее, состояние запоминается только тогда, когда вы возвращаетесь назад (и не обязательно, когда вы позже переходите обратно назад в представление снова), тогда я делаю это: я делаю отдельный сервис, просто объект, который торчит вокруг, в который я могу впрыснуть куда угодно и хранить некоторые переменные. В Angular 1 это будет объект службы.

angular.module('foo').factory("placeHelper", [ 
    () => { 
     let _place = null; 

     class PlaceHelper { 
      set place(place){ 
       _place = place; 
      } 

      get place(){ 
       return _place; 
      } 

      reset(){ 
       _place = null; 
      } 
     } 

     let helper = new PlaceHelper(); 

     return helper; 
    } 
]); 

Затем в контроллер, который вы собираетесь обратно, вы впрыснуть placeHelper и попросить его на место и восстановить свое состояние с помощью $scope.place = placeHelper.place и когда в пользовательском интерфейсе для этого контроллера кто-то выбирает место, вы просто магазин это на службе, placeHelper.place = $scope.place.

Я бы использовал localStorage внутри службы, если бы я хотел сохранить состояние после обновления страницы.

Мне не нравится загрязнение $ rootScope, потому что сложнее отслеживать, когда вы начинаете иметь больше нескольких несвязанных методов, и ваши свойства должны иметь более длинные имена (или группироваться по объектам в любом случае). Для удобства обслуживания лучше инкапсулировать и разделить проблемы.

варьирование Услуги: Услуга может быть литерал объекта вместо класса, и вы можете сразу установить свойства вместо того, чтобы использовать методы, если вы хотите, чтобы это было немного более простым.

angular.module('foo').factory("placeHelper", [ 
    () => { 
     let helper = { 
      place: null, 

      reset(){ 
       this.place = null; 
      } 
     }; 

     return helper; 
    } 
]); 
0

Я недавно наткнулся на ту же проблему. Я решил использовать $ ionicHistory.currentView() и $ ionicHistory.backView() (см. Документацию here). Первая функция возвращает объект, связанный с текущим представлением, в то время как последний возвращает объект, связанный с представлением, к которому вы будете обращаться после вызова $ ionicHistory.goBack().

Перед вызовом $ ionicHistory.goBack() на странице вашего местоположения вы вызываете $ ionicHistory.backView() и определяете новое свойство возвращаемого объекта, содержимое которого является данными, которые вы хотите распространить на другое представление.

На другом экране вы можете изменить свой обработчик событий $ ionicView.enter, чтобы он вызывал $ ionicHistory.currentView(), который извлекает объект с нужными данными.

2

Вот:

$ionicHistory.backView().stateId; 

не игнорируйте включать $ionicHistory на контроллере

+0

Пожалуйста, объясните подробнее здесь –

Смежные вопросы