@sashasoft
junior developer

Почему контроллер в AngularJS срабатывает два раза?

Есть контроллер следующего содержания
app.controller("ProductListCtrl", ['$scope', 'Products', 'Product', function($scope, Products, Product) {
  console.log("ProductListCtrl");
  $scope.sortType      = 'name';
  $scope.sortReverse   = false;
  $scope.searchProduct = '';
  $scope.products = Products.query();
  $scope.deleteProduct = function (id) {
    if (confirm("Are you sure you want to delete this Product?")){
      console.log(id);
      Product.delete({id: id}, function(){
        $scope.products = Products.query();
      });
    }
  }
}]);


И каждый раз когда он срабатывает(кроме первого) в консоль 2 раза выводится console.log("ProductListCtrl");
Почему???

Вот еще роуты
'use strict';

var app = angular.module('app', ['ngRoute', 'ngResource']); 

//Routes
app.config([
  '$routeProvider', function($routeProvider, $locationProvider) {
    $routeProvider
    .when('/', {
      templateUrl: 'templates/index.html',
      controller: 'ProductListCtrl'
    })
    .when('/products/new', {
      templateUrl: 'templates/new-product.html',
      controller: 'ProductNewCtrl'
    })
    .when('/products/:id/edit', {
      templateUrl: 'templates/edit-product.html',
      controller: 'ProductEditCtrl'
    })
    .when('/products/:id', {
      templateUrl: 'templates/detail-product.html',
      controller: 'ProductDetailCtrl'
    })    ;
    
    $routeProvider.otherwise({
      redirectTo: '/products',
      templateUrl: 'templates/index.html',
      controller: 'ProductListCtrl'
    });
  }
]);


и сервисы
'use strict';

var app = angular.module('app');

app.factory('Products', ['$resource',function($resource){
  return $resource('/products', {},{
    query: { method: 'GET', isArray: true },
    create: { method: 'POST' }
  })
}]);

app.factory('Product', ['$resource', function($resource){
  return $resource('/products/:id', {}, {
    show: { method: 'GET' },
    update: { method: 'PUT', params: {id: '@id'} },
    delete: { method: 'DELETE', params: {id: '@id'} }
  });
}]);
  • Вопрос задан
  • 700 просмотров
Решения вопроса 1
@sashasoft Автор вопроса
junior developer
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
потому что контроллеры в ангуляре инстанцируются на каждый заход на стэйт или перерисовку вьюшки (когда элемент удаляется из Dom и добавляется.

То есть по приведенному куску проблему не отловить. Нужно смотреть как вы используете это дело.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы