Nano Hash - криптовалюты, майнинг, программирование

Угловая инъекция зависимостей - невозможно создать экземпляр Factory/Undefined Factory

Я полностью озадачен попыткой создать экземпляр фабрики в моем контроллере. Что бы я ни делал, кажется, что моя фабрика («FBRetrieve») не определена. Это должно быть что-то очень простое, но я не могу найти решение через S/O search/google/angulardocs.

app.js

var legalmvc = angular.module('legalmvc', ['ngRoute','FireBaseService']);

factory.js

angular.module("FireBaseService", []).factory('FBRetrieve', function(){
    var biblioData = new Object();


    biblioData.getData = function(type){
        var biblioRef = new Firebase('https://legalcitator.firebaseio.com/'+type);

        biblioRef.on('value', function(data) {
            if (data.val() === null) {
                console.log("ERROR");
                return;
            }
            console.log(data.val());
            biblioData = data.val();


        });

        return biblioData;

    };

});

и в контроллере я создаю что-то вроде этого:

legalmvc.controller('FormCtrl',["$scope","FBRetrieve", function ($scope, FBRetrieve) {

    $scope.FBRetrieve = FBRetrieve.getData('case');

..... 

Ответы:


1

getData — это асинхронная операция, это означает, что ответ еще не доступен, когда вы пытаетесь его вернуть. Вместо этого вы должны использовать обратный вызов отложенного шаблона (в данном случае более естественный):

biblioData.getData = function(type) {

    var biblioRef = new Firebase('https://legalcitator.firebaseio.com/'+type),
        deferred = $q.defer(); // remember to inject $q service into factory 

    biblioRef.on('value', function(data) {
        if (data.val() === null) {
            deferred.reject('ERROR');
        }
        deferred.resolve(data.val());
    });

    return deferred.promise;
};

Затем вы должны использовать его в контроллере:

FBRetrieve.getData('case').then(function(data) {
    $scope.FBRetrieve = data;
}, function() {
    // handle error
});

Также узнайте об этой распространенной проблеме и решении.

13.07.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..