Как я могу сохранить данные с одного взгляда на другой в angularjs?Сохранить данные в форме
я сделал $ rootScope
Как я могу сохранить данные с одного взгляда на другой в angularjs?Сохранить данные в форме
я сделал $ rootScope
Из того, что я вижу, вы используете 2 различные контроллеры для каждого вида (или один для зрения и ни для вида корня).
Проблема заключается в том, что Angular не может обмениваться данными между такими контроллерами.
Вы должны либо использовать сервис/завод, или использовать rootscope, но не как вы это делали, а с broadcast
и emit
Если бы я тебя, я хотел бы использовать службу.
EDIT Здесь вы идете, сервис для вас:
(function() {
'use strict';
angular
.module('YourModuleName')
.factory('CountriesService', CountriesService);
CountriesService.$inject = ['Your', 'dependencies', 'here', 'in', 'string'];
/* @ngInject */
function CountriesService(your, dependencies, here, not, in, string) {
var service = {
setCountries: setCountries,
getCountries: getCountries
};
var vm = this;
vm.countries = []; // Or maybe an object ?
// ... List of other variables you need to store.
return service;
////////////////
function setCountries(listOfCountries) {
vm.countries = listOfCountries;
}
function getCountries() {
return vm.countries;
}
}
})();
Это сохранит ваши переменные. В вашем контроллере вы добавляете CountriesService
в качестве зависимости, чтобы сэкономить вам CountriesService.setCountries
и для загрузки вы используете CountriesService.getCountries
. Имейте в виду, что обновление страницы приведет к удалению всех данных!
EDIT НОМЕР 2 Если ты боишься John papa guidelines, вот простой сервис, вы можете использовать в том же файле вы кладете контроллер:
app.factory('CountryControl', function(your, dependencies) {
var service = {
setCountries: setCountries,
getCountries: getCountries
};
this.countries = []; // Or maybe an object ?
// ... List of other variables you need to store.
return service;
////////////////
function setCountries(listOfCountries) {
this.countries = listOfCountries;
}
function getCountries() {
return this.countries;
}
});
У меня только 1 контроллер, и я передаю его в routeProvider для подробной страницы. Я действительно не знаю, как настроить службу из моего кода. Не могли бы вы привести несколько примеров? Кстати, должен ли я загружать всю свою папку веб-сайта где-нибудь для вас? Может быть, вам легче увидеть страницу перед вами. –
Nah Я хороший, я просто отправлю вам сервис и покажу вам, как его использовать. Вы должны вникать в это, вы найдете много обучающих онлайн. Хорошо, подождите секунду, я отредактирую свой ответ. – trichetriche
@ rickastley здесь вы идете, см. Редактирование. – trichetriche
У меня есть приложение, которое делает это более или менее. Служба исправляет это красиво. И создает такой механизм, что вы можете сделать это в любом месте своего приложения.
Во-первых, я бы рекомендовал не пытаться управлять этим с помощью области. Просто поставьте объект на свой контроллер (myFormObj) и добавьте свойства, которые вы хотите ему (имя, ранг, серийный номер и т. Д.).
Затем привяжите поля ввода формы к свойствам этого объекта (в отличие от областей видимости). Таким образом, ваши модели ng-model будут выглядеть как myCtl.formObj.name и так далее.
Когда пользователь запускает событие, которое изменяет представление, сохраните COPY (угловую копию) этой формыObj в сторону, как правило, в службе (подумайте FormStateService или что-то в этом роде). FormStateService не мог сделать ничего, кроме простого массива.
this.forms = { 'TheNameOfYourForm' : theFormObjToSave };
Таким образом, когда пользователь запускает это событие, которое оставляет форму, вы просто делаете это:
formStateSvc.forms [ 'NameOfMyForm'] = angular.copy (theFormObj);
Когда пользователь возвращается к первоначальному виду и контроллер инициализируется, вы просто спросите formStateSvc:
if ('NameOfMyForm' in formStateSvc.forms) {
this.formObj = formStateSvc.forms [ 'NameOfMyForm' ];
}
Вуаля, ваша старая форма состояние восстанавливается.
Более надежно, вы можете создать методы «addForm, removeForm» и т. Д., Вы можете обеспечить защиту от таких вещей, как неопределенные, и вы можете сделать повторную привязку к прежнему состоянию неявным (когда контроллер вашей формы находится, просто попросите его восстановить если есть, чтобы восстановить).Таким образом, ваш контроллер будет иметь:
this.formObj = formStateSvc.rebindOldDataIfItExists ('MyFormName');
Вы получаете идею.
Простой подход заключается в создании объекта поставщика значения и опубликовать его на сфере:
//Create value provider object
app.value("FormObj", {});
app.controller("myController", function($scope, FormObj) {
//Publish on scope
$scope.FormObj = FormObj;
});
Тогда имеет ng-model
директивы использовать этот объект:
Name <input ng-model="FormObj.name"><br>
Rank <input ng-model="FormObj.rank"><br>
SerialNum <input ng-model="FormObj.ssnum"><br>
Объект значения одноэлементен который сохраняется для жизни приложения. Изменения в содержимом объекта будут сохранены и доступны другим контроллерам и сохранят изменения в представлении.
До сих пор не удалось решить эту проблему. Я не хочу переделывать весь свой webapp, чтобы как-то сохранить вкладку формы. Должен быть быстрый способ сделать это. Любая помощь приветствуется! –