Это мой частичный вид settings.html
AngularJS - Сохранение пользовательских настроек в службе
<div ng-controller="settingsController">
<h3>General Settings</h3>
<table class="table">
<tbody>
<tr class="success">
<td class = "col-xs-3">Language:</td>
<td class = "col-xs-9">Gmail display language:
<select ng-model = "userPreferences.selectedLang" ng-options="language for language in languages">
<option value = ""> Choose a language </option>
</select>
</td>
</tr>
<tr class="danger">
<td class = "col-xs-3">Conversation View</td>
<td class = "col-xs-9">
<input type = "radio" name = "conversation" id = "converseOn" ng-model="userPreferences.converse.state" value = "on" checked>
<label for="converseOn"> Conversation view on </label>
<aside>
<input type = "radio" name = "conversation" ng-model="userPreferences.converse.status" value = "off" id = "converseOff">
<label for="converseOff"> Conversation view off </label>
</aside>
</tr>
<tr class="info">
<td class = "col-xs-3">Maximum page size: </td>
<td class = "col-xs-9"> Show conversations per page
<select ng-model = "userPreferences.selectedNumber" ng-options="conversation for conversation in conversations">
<option value = ""> Choose the no.of conversations to display </option>
</select>
<aside id = "pageSize" > Show contacts per page
<select ng-model = "selectedNumberContacts" ng-options="contact for contact in contacts">
<option value = ""> Choose the no.of contacts to display </option>
</select>
</aside>
</td>
</tr>
</tr>
</tbody>
</table>
<div class="form-actions" >
<button type="submit" class="btn btn-primary" ng-click = "setPreference()">Save changes</button>
<button type="button" class="btn">Cancel</button>
</div>
</div>
Это settingsController.js
(function() {
'use strict';
var settingController = function (fetchDataService, $scope, savePreferenceService) {
var url = 'app/mock/settings.json';
fetchDataService.getContent(url)
.then(function(response){
$scope.contacts = response.data.contacts;
$scope.languages = response.data.languages;
$scope.conversations = response.data.conversations;
$scope.undoSend = response.data.undoSend;
});
$scope.userPreferences = {
selectedLang : '',
converse : {
state: 'on'
},
selectedNumber : 0
}
$scope.setPreference = function() {
savePreferenceService.selectedPreferences($scope.userPreferences.selectedLang, $scope.userPreferences.converse.state, $scope.userPreferences.selectedNumber);
}
};
angular.module('iisEmail')
.controller ('settingsController',
['fetchDataService', '$scope', 'savePreferenceService', settingController]);
}());
Это savePreferenceService.js
(function() {
'use strict';
var savePreferenceService = function() {
this.selectedPreferences = function (selectedLang, converse, selectedNumber) {
this.selectedLang = selectedLang;
this.converse = converse;
this.selectedNumber = selectedNumber;
console.log(this.selectedLang);
console.log(this.converse);
console.log(this.selectedNumber);
}
};
angular.module('iisEmail')
.service ('savePreferenceService', savePreferenceService);
}());
Итак, в основном моя целью является сохранение пользовательских настроек, когда кнопка Save changes
является кликой рунец.
Для достижения этой функциональности я определил объект в контроллере и привязал его свойства к виду с помощью ng-model
. Когда нажата кнопка изменения изменений, вызывается функция setPreference()
, которая вызывает вызов службы savePreferenceService
. savePreferenceService
сохраняет параметры, выбранные пользователем. Все работает так, как ожидалось.
Я просто хочу знать, есть ли лучший способ сделать это (с точки зрения передового опыта). Мое требование - сохранить параметры, выбранные пользователем в службе.
Спасибо за ответ. Это было полезно. Я реорганизовал свой контроллер и службу, как вы предложили. Однако теперь у меня возникают проблемы с привязкой 'ng-model' к объекту' userPreferences' в службе. –
Вам нужно будет опубликовать код, чтобы узнать, в чем проблема, но как только у вас есть метод службы getPreferences, все, что вам нужно сделать в контроллере, задает вам userPreferences как: $ scope.userPreferences = savePreferenceService.getPreferences(); – GPicazo
Я понял. Благодарю. –