Restangular方法被触发两次

时间:2014-02-03 12:26:16

标签: javascript angularjs restangular

我有以下示例:

var loadUserWidget;

loadUserWidget = function() {
  console.log(Restangular.one());
  if (!$scope.i) {
    $scope.i = 0;
  }
  console.log($scope.i);
  return $scope.i = $scope.i + 1;
};

loadUserWidget()

我得到以下console.log

  

Object {id:undefined,route:undefined,getRestangularUrl:function,getRequestedUrl:function,addRestangularMethod:function ...}    cache_list_controller.js体= 1:276

     

0 cache_list_controller.js?body = 1:280

     

Object {id:undefined,route:undefined,getRestangularUrl:function,getRequestedUrl:function,addRestangularMethod:function ...}    cache_list_controller.js体= 1:276

     

1 cache_list_controller.js?body = 1:280

你可以看到restangular方法被触发两次,我似乎无法确定原因。

更新:

Contorller:

bbControllers.controller('CacheListController', [
  '$scope', 'Restangular', '$rootScope', 'Snippet', '$modal', '$templateCache', "$window", 'Widget', '$sce', '$location', function($scope, Restangular, $rootScope, Snippet, $modal, $templateCache, $window, Widget, $sce, $location) {
    var loadUserWidget;
    loadUserWidget = function() {
      console.log(Restangular.one());
      if (!$scope.i) {
        $scope.i = 0;
      }
      $scope.i = $scope.i + 1;
      return console.log($scope.i);
    };
    return loadUserWidget();
  }
]);

app.js

var bbPlnkr = angular.module('BBPlnkr', ['BB', 'restangular', 'ngRoute', 'xeditable', 'ngSanitize']);

bbPlnkr.config(function ($routeProvider, $locationProvider, RestangularProvider) {
    $routeProvider
        .when('/edit', {
            templateUrl: '../assets/index.html',
            controller: 'CacheListController',
            reloadOnSearch: false
        })
        .when('/edit/:id', {
            templateUrl: '../assets/index.html',
            controller: 'CacheListController'
        })
        .when('/invitation/:url', {
            templateUrl: '../assets/invitation-detail.html',
            controller: 'InvitationController'
        })
        .otherwise({
            redirectTo: '/edit'
        });
    $locationProvider.html5Mode(true);
});

1 个答案:

答案 0 :(得分:4)

在模板中同时使用ng-controller指令并使用$routeProvider声明路由时,将有两个控制器实例,它们都将触发一个Restangular请求。

如果你这样做

connsole.log($scope.$id);

你应该看到两个不同的值,因为有两个不同的控制器。

使用ng-controller时,请勿使用$routeProvider