如何从$ scope.watch函数中调用控制器中的函数? 我尝试这样的东西,但那不起作用
$scope.$watch(function(){return self.user}, function (newVal, oldVal, scope){
if (self.user) {
getNotificationCount();
}
});
var getNotificationCount = function(){
console.log("called your function");
}
它给了我一个错误
TypeError: getNotificationCount is not a function
答案 0 :(得分:1)
在角度范围内声明函数:
$scope.getNotificationCount = function(){
console.log("called your function");
}
答案 1 :(得分:1)
您需要在调用之前定义getNotificationCount
。
var getNotificationCount = function(){
console.log("called your function");
}
$scope.$watch(function(){return self.user}, function (newVal, oldVal, scope){
if (self.user) {
getNotificationCount();
}
});
答案 2 :(得分:0)
因为可变吊装。当你有一个稍后在代码中声明的函数表达式时,它只是提升变量声明并按照执行顺序将方法分配给它。
在您的情况下,声明了getNotificationCount变量,但稍后会为其分配一个函数引用。因此,要解决此问题,您需要在进行调用之前将函数表达式移动到某个位置,或者使用函数定义,例如 function getNotificationCount(){};
您可以阅读有关功能提升here
的更多信息答案 3 :(得分:0)
$scope.$watch(function(){return self.user}, function (newVal, oldVal, scope){
if (self.user) {
getNotificationCount();
}
});
var getNotificationCount = function(){
console.log("called your function");
}
在当前的代码片段中,问题在于您尝试声明函数getNotificationCount的方式,您通过赋值声明了一个函数。因此,执行顺序以第一个$ scope。$ watch代码块的执行方式设置,一旦完成,将执行变量声明getNotificationCount。
但是如果你将getNotificationCount方法定义为函数表达式,那么
function getNotificationCount() {
console.log('calling your function')
}
你不会收到错误。在设置执行顺序之前,将评估范围中的所有函数表达式。 无论是在$ scope之前还是之后定义函数都无关紧要。$ watch()。 因此,当您以这种方式定义方法时,编译器将首先评估所有方法定义,然后当执行顺序到达$ scope。$ watch语句时,它将具有要调用的getNotificationCount的函数定义。
在你的情况下,编译器甚至不知道var getNotificationCount右边的内容,直到它在$ scope之后执行它。$ watch执行(如果这甚至完成而没有抛出错误)