как использовать $resource для получения данных из локального файла json

#angularjs #angular-resource

#angularjs #angular-resource

Вопрос:

Я пытаюсь несколькими способами получить доступ к своим пользователям в локальном файле json, чтобы позже сравнить их с вводом пользователей. и если есть совпадение, доступ разрешен, но моя главная проблема сейчас — просто добраться до этих пользователей. Мой код до сих пор:

весь код

файл json

Что я делаю не так? я такой новичок в программировании. Я пробовал разные вещи, и ничего не работает. Большое спасибо за помощь

Комментарии:

1. Что значит локальный? У вас есть локальный http-сервер?

2. @AlexanderAnikeev.. я имею в виду локальный файл json со всеми моими пользователями, и для запуска моего приложения angular я использую http-сервер.

Ответ №1:

Можете ли вы получить доступ к файлу через браузер (через ваш url localhost:8080/resources/data/users.json)?

Если вы не сможете, вы не сможете получить доступ через $resource или $ http.

Если вы можете, любой метод должен работать:

1) Через $resource

 $scope.users = [];

var UsersResource = $resource('/resources/data/users.json');
  

где мы можем получить ответ с помощью обратного вызова

 UsersResource.get({}, function(response) {
    $scope.users = response;
});
  

или с помощью $promise

 UsersResource.get().$promise.then(function(response) {
    $scope.users = response;
});
  

2) Через $http.get

 $scope.users = [];

$http.get('/resources/data/users.json').then(function(response) {
    $scope.users = response;
});
  

В вашем примере вы пытаетесь получить массив пользователей, возвращая $resource, но $resource возвращает объект с методами. Каждый метод имеет обратные вызовы (успех, ошибка) или возвращает объект $promise .

Ответ №2:

Нет необходимости использовать $resource , если вы просто собираетесь получить файл json. Используйте $http вместо:

 this.getUsers = function(){
  return $http.get('path/to/file.json');
};
  

И использование:

 dataService.getUsers().then(function(resp){
    //Do something with the data
    $scope.users = resp;
})
  

$resource предназначен для использования при взаимодействии с RESTful API. То, что вы getUsers() делаете, на самом деле возвращает объект-ресурс, который вы затем можете вызвать get() . Но я рекомендую использовать $http в этом случае.

Комментарии:

1. Спасибо, я пробовал этот способ и все еще не работает, я получаю ошибку 404: angular.js:11881 GET localhost:8080/resources/data/users.json 404 (Не найден)

2. Я не знаю, как выглядит ваша среда разработки, но если вы предварительно скомпилируете код с помощью модуля bundler, вам нужно будет скопировать файл json в build каталог или аналогичный. Код работает, просто неверный путь к файлу!

Ответ №3:

Если вы хотите использовать $resouce, вам нужно создать две функции в вашем контроллере / фабрике, где «templatesSuccess» возвращает данные запроса.

         getAllTemplates: function(query) {
            return $resource(CONST.CONFIG.BASE_URL   'receiver/get-templates').get(query, obj.templatesSuccess).$promise;
        },


        templatesSuccess: function(response) {
            obj.allTemplates = response;
        },
  

Комментарии:

1. спасибо за вашу помощь .. но я не уверен, что полностью понимаю ответ или синтаксис. смущает эта строка: return $resource(CONST. CONFIG.BASE_URL ‘receiver/get-templates’).get(запрос, obj.templatesSuccess).$обещание;

2. Это полный путь, из которого вы хотите получить API… Здесь вы можете указать полный путь к файлу json