我正在开发一个用 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/