В настоящее время у меня есть угловое приложение с одним модулем. Этот модуль определяет контроллер и службу. В настоящее время я использую службу для обновления своего представления. Должны ли службы обновлять логику просмотра? Или это должно быть сделано в отдельном Угловом компоненте?AngularJS Рекомендации по изменению вида
index.html
<div ng-controller="AppController as AppCtrl">
<div id="grid1" ui-grid="{ data: myData }" class="grid"></div>
<button ng-click="AppCtrl.getPeople()" ng-model="AppCtrl.getPeopleButtonText" ng-bind="AppCtrl.getPeopleButtonText"></button>
<button ng-click="AppCtrl.clearPeople()">Clear</button>
{{AppCtrl.errorMessage}}
</div>
app.js
angular.module('app', ['ui.grid'])
.controller('AppController', ['$scope', "PersonService", function ($scope, PersonService) {
var controllerScope = this;
controllerScope.getPeopleButtonText = "Get People";
this.getPeople = function(){
PersonService.getPeople($scope, controllerScope);
};
this.clearPeople = function(){
PersonService.clearPeople($scope, controllerScope);
};
}])
.service("PersonService", ["$http", function($http) {
var refreshCount = 0;
this.getPeople = function(rootScope, controllerScope){
var sampleData = [
{
"firstName": "Cox",
"lastName": "Carney",
"company": "Enormo",
"employed": refreshCount%2 == 1
},
{
"firstName": "Lorraine",
"lastName": "Wise",
"company": "Comveyer",
"employed": refreshCount%2 == 0
},
{
"firstName": "Nancy",
"lastName": "Waters",
"company": "Fuelton",
"employed": refreshCount%2 == 1
}
];
$http.post("https://httpbin.org/post", sampleData)
.success(function(data){
rootScope.myData = JSON.parse(data.data);
refreshCount++;
controllerScope.getPeopleButtonText = "Refresh " + refreshCount;
controllerScope.errorMessage = "";
})
.error(function() {
controllerScope.errorMessage = "An error has occurred."
});
};
this.clearPeople = function(rootScope, controllerScope) {
rootScope.myData = [];
controllerScope.getPeopleButtonText = "Get People";
}
}]);
Есть ли лучший способ структурировать этот код? Другим подходом, который я прочитал, было создание ViewService и представление ViewService в корневую область.
EDIT 19 ноября Я использую Угловое обещание обрабатывать случаи успеха/ошибки при выполнении вызова службы в контроллере, а не внутри службы. Это позволяет мне перемещать обновления просмотра в контроллер. Является ли это правильным местом для просмотра обновлений?
this.getPeople = function() {
PersonService.getPeople()
.then(function(data) {
$scope.myData = JSON.parse(data);
controllerScope.getPeopleButtonText = "Refresh";
controllerScope.errorMessage = "";
}, function(error) {
controllerScope.errorMessage = "An error has occurred."
});
};
Вот пример plnkr http://plnkr.co/edit/tzuSX3aAcUqpH5bM7cIa?p=preview
Услуги обычно используются для хранения и изменения данных или в качестве контейнера для функций, которые будут использоваться многими частями приложения. Директивы обычно используются для управления просмотром. –