2015-01-22 2 views
1

Я довольно новый для углового.угловой модуль доступа с завода

То, что я хочу, что когда фабричный метод вызывается снаружи, метод должен обновлять данные модули области видимости, как это:

fileList.controller('FileListController', ['$scope', function ($scope) { 
    $scope.device = {}; 
    $scope.files = []; 
    $scope.isDeviceDefined = function() { 
     return typeof $scope.device === 'object' && $scope.device !== null && $scope.device.hasOwnProperty('label'); 
    }; 
}]); 

fileList.factory('deviceFiles', ['$scope', 'files', function ($scope, files) { 
    return { 
     setFilesForDevice: function (device) { 
      $scope.device = device; 
      $scope.files = files.getFilesFromDevice(device.label); 
     } 
    }; 
}]); 

Но он говорит, что $ сфера является неизвестным поставщиком. Есть ли другой способ, чтобы данные модулей могли быть обновлены? setFilesForDevice - это метод, который вызывается нажатием кнопки внутри другого шаблона контроллеров.

+0

'$ scope' технически * местные * к контроллеру, т.е. нет Углового сервиса, обеспечивающего его; подсистема представления предоставляет ее каждому контроллеру, который он создает. Таким образом, нет, услуги ** не могут обладать областью применения **. И они не должны, концептуально неправильно иметь сервисный уровень в зависимости от вида. Что ты можешь сделать? (1), служба возвращает объект и связывает его с областью (2), передавая область действия методу службы в качестве аргумента [(3), возможно, другие]. Я бы пошел (1). –

+0

Области создаются директивами/для. Контроллеры связаны с директивами, поэтому им может быть предоставлен доступ к их областям. Услуги не имеют отношения к директивам. Эрго у них нет дел с областями. – zeroflagL

+0

Тогда как я могу обновить значения $ scope при вызове фабричного метода deviceFiles? –

ответ

1

Здесь вы должны придерживаться немного другого подхода. Во-первых, вы получаете свой идентификатор устройства в контроллере через $ routeParams.device.

Затем создать службу, которая будет инъекционной в FileListController и предоставлять информацию о файлах, т.е.

fileList.controller('FileListController', ['$scope', '$routeParams', 'deviceFilesService', function ($scope, $routeParams, deviceFilesService) { 
    $scope.device = $routeParams.device; 
    $scope.files = deviceFilesService.getFilesForDevice($routeParams.device); 
}]); 

fileList.service('deviceFilesService', ['files', function (files) { 
    this.getFilesForDevice = function (device) { 
     // Code to look up list of files the the device 
    }; 
}]); 
Смежные вопросы