2016-11-17 2 views
0

У меня есть следующий сервис, который успешно подключается к файлу PHP для меня и хватает данных из базы данных:AngularJS служба вопрос об обмене данными с контроллером

(function(){ 
    'use strict'; 
    angular.module('app.services') 
     .factory('myService', [ 'getContent', function(getContent, $resource, $scope) { 


      return { 
       //list of things returned by this service: 

       getEventTypes: function(dir, file) { 
        var getAllTypes = getContent.getphp(dir, file); 

        getAllTypes.query(function(data){ 

         $scope.mytypes = data; 

        }); 
       } 
      }; 

     }]) 
    ; 

})(); 

Но я не могу назначить данные любых переменных через него , Фактически, $ scope.mytypes дает мне «Невозможно установить свойства» etypes «неопределенного» ... Я не уверен, что происходит? Если я удалю $ resource и $ scope, тогда это не сработает, поскольку я ввожу еще одну услугу в эту службу ... Blegh. Предложения?

ответ

1

Не используйте $ scope в сервисе, который не рекомендуется.

Как Angulajs является MVC Framework М-модель должна быть связана между V-образным видом и C-контроллером, где $ Объемом здесь является модель - сущности, которая соединяет точку зрения на контроллер.

Следовательно, мы не должны использовать это в сервисе и работать не будем должным образом.

Обычно мы используем один контроллер для каждого вида, и если у нас есть какие-либо общие логики, которые следует использовать повторно в нескольких контроллерах, таких как общая проверка, вызов API и т. Д., Он должен использоваться в службе. Вот почему служба построена как одноэлементный объект, что означает, что в SPA-приложении (одностраничное приложение) будет создан только один экземпляр и будет использоваться совместно несколькими контроллерами. Но для каждого представления должен быть создан уникальный контроллер и $ scope.

Надеюсь, вы это понимаете. Следовательно, ваша вышеуказанная служба может быть изменена, как показано ниже, чтобы вернуть обещание вызова API, где вы можете использовать то же самое внутри контроллера для вызова и назначения объекта в область $.

Сервис

return { 
       //list of things returned by this service: 

       getEventTypes: function(dir, file) { 
        var getAllTypes = getContent.getphp(dir, file); 

        return getAllTypes; 
       } 
      }; 

Контроллер

myService.getEventTypes(/* params */).query(function(data) { $scope.myTypes = data; }); 
+0

Дает .then не ошибка функции .. –

+0

@VarvaraJones Вы должны разместить код для 'службы getContent' исправить эту – Aruna

+0

I мог. Но это огромно. Помогло бы мне, если бы я дал то, что он утешает в результате этой функции? Однако я буду работать над публикацией getContent. –

1

Это альтернативный способ, с помощью которого вы можете иметь свою службу сделать всю работу за вас сокращения строк кода в контроллере ,

(function(){ 
    'use strict'; 
    angular.module('app.services') 
     .factory('myService', [ 'getContent', function(getContent, $resource, $scope) { 

      return { 
       //list of things returned by this service: 
       getEventTypes: function(dir, file,successcallback) { 
         getContent.getphp(dir, file) 
         .query() 
          .success(function (data, status, headers, config) { 
           successcallback(data); 
           }) 
          .error(function (data, status, headers, config) { 
           $log.warn(data, status, headers, config); 
          }) 
       } 
      }; 
     }]); 
})(); 

Присвоение объекта области видимости будет как этот

myService.getEventTypes(/*you params comma separate if needed*/,function(successcall){ 
$scope.data=successcall; 
}); 
+0

Дает a. Then не является функцией ошибки .. –

+0

Большое вам спасибо за вашу помощь! Я заработал. –

+0

@ VarvaraJones Рад помочь вам. Отметьте это как ответ и upvote тоже :): P – Aravind

Смежные вопросы