问题

我理解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);
});

//...

执行两次,将两个记录插入我的数据库.我显然还在学习,因为我一直在撞我的头这个年龄!



解决方法

应用程式路由器指定导航至 MyController ,例如:

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

但我也有在 home.html :

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

这个消化了控制器两次.从HTML中删除 data-ng-controller 属性解决了问题.或者, 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">

这也会导致两次运行控制器.




相关问题推荐