javascript - AngularJS 中 Controller 对象的生命周期

标签 javascript angularjs ajax ionic-framework firebase-realtime-database

我正在开发一个用 Ionic-1 编写的混合应用程序,它使用 Angular-1 javascript 库和 HTML-5 来创建混合应用程序。

在我的代码中,我连接到 Firebase 以获取一些数据:

我的Ctrl:

angular.module('myctrl.controller', [])
  .controller('MyCtrl', function () {
    $ionicPlatform.ready(function () {
      try {
            var userRef = firebase.database().ref().child("users/" + loggedInUser.userName + "/details");             
            userRef.on('child_added', function(snapshot, prevChildKey) {
              var newUser = snapshot.val();
              console.log("New user " + JSON.stringify(newUser));
          });
        }
     });
  });

现在据我了解,每次重新创建 Controller 所附加的 View 时,都会重新实例化 Controller 。但是,在我的应用程序中,即使我位于附加到该 Controller 的 View 之外,并在 firebase 中添加用户,该代码也会被执行。这让我很困惑,因为一旦 View 被另一个 View 替换,这段代码就应该被垃圾收集。这是否意味着这个 on() 方法以某种方式附加到 $rooScope 上?

最佳答案

Firebase 事件不会自动取消注册,您必须在离开 Controller 时手动取消注册。

var userRef;
$ionicPlatform.ready(function () {
  try {
    userRef = firebase.database().ref().child("users/" + loggedInUser.userName + "/details");             
    userRef.on('child_added', function(snapshot, prevChildKey) {
      var newUser = snapshot.val();
      console.log("New user " + JSON.stringify(newUser));
    });
  }
});

$scope.$on('destroy', function() {
  if (userRef) userRef.off();
})

关于javascript - AngularJS 中 Controller 对象的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44212913/

相关文章:

php - 如何使用 PHP 读取/显示 XML

angularjs - 如何在 AngularJS 中停止 $timeout?

javascript - mocha 如何知道事件何时在 $promise 内使用 $broadcast 在 Controller $scope 上触发?

php - 我的 AJAX PHP 请求有什么问题?

jQuery AJAX 函数返回 true 或 false 仅返回 false,而一切都很好

javascript - 数组中的 Coffeescript 类对象

javascript - 侧向切换 - 向右滑动打开,向左滑动关闭

javascript - AngularJS ng-重复未知的深度数组

javascript - 使用 JQuery 通过 AJAX 从 OneDrive 上传文件时出错

javascript - 需要找到替代 Plaxo 帐户的添加小部件