Ответ 1
У меня была такая же проблема, как и у вас, когда контроллер в целом вызывался дважды; следовательно, factory будет вызываться дважды.
Но посмотрев на это решение: Дважды удваивает выполнение контроллера AltularJS
Шаг 1:
Убедитесь, что вы добавили службу и контроллер в свой (основной вид макета) только один раз.
Пример:
index.html
<script src="../MyItemsController.js"></script>
<script src="../MyItemsService.js"></script>
Если проблема по-прежнему сохраняется после выполнения шага 1, перейдите к шагу 2
Шаг 2:
Есть два способа сделать это:
1. Либо держите контроллер в своем представлении (ng-controller), и удалите его из своего конфигурационного маршрута следующим образом:
config (обычно, app.js):
app.config(['$routeProvider', function($routeProvider){
$routeProvider.when('/',
{
templateUrl: 'pages/home.html'
//Remove controller from here
});
}]);
home.html
<!-- Add the ng-controller in your view -->
<div ng-controller="MyItemsController">
<!-- Your stuff -->
</div>
2. Или держите контроллер в своем конфигурационном маршруте и удалите ng-controller из вида:
config (обычно, app.js):
app.config(['$routeProvider', function($routeProvider){
$routeProvider.when('/',
{
templateUrl: 'pages/home.html',
controller: 'MyItemsController' //Add the controller here
});
}]);
home.html
<!-- Remove the ng-controller in your view -->
<div>
<!-- Your stuff -->
</div>
Примечание. Вышеупомянутое решение также работает с ui-маршрутизатором.