一尘不染

对抗AngularJS执行控制器两次

angularjs

我了解AngularJS会在某些代码中运行两次,有时甚至更多,例如$watch事件,不断检查模型状态等。

但是我的代码:

function MyController($scope, User, local) {

var $scope.User = local.get(); // Get locally save user data

User.get({ id: $scope.User._id.$oid }, function(user) {
  $scope.User = new User(user);
  local.save($scope.User);
});

//...

执行两次,将2条记录插入我的数据库。很显然,我一直在为此奋斗,我一直在学习!


阅读 224

收藏
2020-07-04

共1个答案

一尘不染

应用路由器将导航指定为MyController如下所示:

$routeProvider.when('/',
                   { templateUrl: 'pages/home.html',
                     controller: MyController });

但我在home.html

<div data-ng-controller="MyController">

这使控制器消化了两次。data-ng- controller从HTML中删除属性可以解决此问题。或者,controller:可以从路由指令中删除该属性。

使用选项卡式导航时也会出现此问题。例如,app.js可能包含:

  .state('tab.reports', {
    url: '/reports',
    views: {
      'tab-reports': {
        templateUrl: 'templates/tab-reports.html',
        controller: 'ReportsCtrl'
      }
    }
  })

相应的报告选项卡HTML可能类似于:

<ion-view view-title="Reports">
  <ion-content ng-controller="ReportsCtrl">

这也将导致控制器运行两次。

2020-07-04