Я пытаюсь понять, как правильно работать с данными в Угловом 1.Правильно работать с данными в угловом
Я использую компонентный подход. Рассмотрим простой случай. У меня есть боковая навигация и приборная панель. Мне нужно показать данные отделов в этих компонентах.
import sidenavHtml from './sidenavigation.html';
import sideNavController from './sidenavigation.controller';
export default SideNavigation;
SideNavigation.$inject = [
];
function Sidenav() {
return {
restrict: 'E',
scope: {},
template: sidenavHtml,
controller: sideNavController,
controllerAs: 'ctrl',
link: function ($scope, elem, attrs) {
}
};
}
export default class SideNavigationController {
...
$onInit() {
this.getDepartments();
}
getDepartments() {
this.departmentService.getDepartments().then((result) => {
this.departments= result.data;
});
}
}
export default class DashboardController {
...
$onInit() {
this.getDepartments();
}
getDepartments() {
this.departmentService.getDepartments().then((result) => {
this.departments= result.data;
});
}
}
export default Departments;
function Departments($http) {
function getDepartments() {
return $http({url: 'http://localhost:9000/api/departments', method: 'GET'});
}
function create(newDepartment) {
return $http.post('http://localhost:9000/api/departments', newDepartment);
}
return {getDepartments, create};
}
В компоненте пользователя Dashboard
может создать новый отдел (создание еще один компонент, который вызывается из Dashboard
компонента). Когда пользователь создал новый отдел, я должен уведомить об этом SideNavigation
и Dashboard
. Так, в Dashboard
и SideNavigation
компонентов я использую следующий код: this.$rootScope.$on('updateDepartmens',()=> { this.getDepartments(); });
Ну, недостатки этого ПОДХОД очевидны. Когда мое приложение отображается, я получаю два HTTP-запроса, и я использую $rootScope
. Я решил переписать сервис следующим образом:
export default Departments;
function Departments($http) {
this.departments;
function getDepartments() {
if(!departments) {
$http({url: 'http://localhost:9000/api/departments', method: 'GET'})
.then((response) => {
this.departments = response.data;
})
.catch((err) => {
console.log('error');
});
}
return this.departments;
}
function create(newDepartment) {
$http.post('http://localhost:9000/api/departments', newDepartment)
.then((response) => {
// handle response and add to departments;
...
this.departments.push(response.data);
);
}
return {getDepartments, create};
}
Как вы думаете, это хороший подход, или есть другой способ?
Как вы думаете, должен ли я использовать этот подход в целом или использовать свой первый подход (метод вызова службы, который делает HTTP-запрос), когда мне не нужны данные совместного доступа и использование второго подхода (привязка к переменной), когда мне нужно обмениваться данными ?
Еще один вопрос. Используете ли вы модели сопоставления серверов для моделей клиентов или используете только объекты, возвращаемые с сервера?
Большое спасибо за ответ. Я обязательно посмотрю на эту библиотеку. – user348173