Когда у вас есть функция в базовом классе, вы можете Redefine
или Override
в производном классе.
Переопределение метода : новая производная для метода базового класса приведена в производном классе. Не облегчает Dynamic binding
.
Переопределение метода : Redefining
a virtual method
базового класса в производном классе. Виртуальный метод облегчает динамическое связывание.
Итак, когда вы сказали:
Но ранее в книге, узнав об основном наследовании, я смог переопределить базовые методы в производных классах без использования «virtual».
blockquote>вы не переопределяли его, поскольку метод в базовом классе не был виртуальным, а вы переопределяли его
Решение 1 - Удалите $ rootcope. $ примените к сервису и добавьте $ timeout к контроллеру:
firebaseService.on('child_added',function(data){
$timeout(function(){
$scope.messages.push(data.val());
},0);
});
Решение 2 - Внедрите метод «SafeApply» (спасибо Alex Ванстон):
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
fn();
} else {
this.$apply(fn);
}
};