我在angular.js控制器中有一个if语句,如果满意则会改变我的应用程序的$状态。
这是一行:
if ($scope.cond1)
$state.go(".main");
.. rest of controller code
如果满足此条件,我希望控制器代码停止继续。 我通过将其改为:
来实现这一目标 if ($scope.cond1)
return $state.go(".main");
.. rest of controller code
我不明白为什么回归在这里工作。它究竟做了什么。我一直在写角度,我从来没有以这种方式使用'返回'。
我习惯在函数内部使用它,它在这里是如何工作的?
答案 0 :(得分:1)
我不明白为什么回归在这里工作。
为什么返回工作在任何功能?答:因为这是javascript语言编程工作的方式。当在函数中遇到return语句时,不再执行函数中的语句。
它实际上做了什么。
返回$ state.go()返回的值。代码中的所有函数调用都被函数的返回值替换。所以在这一行:
return $state.go(".main");
片段:
$state.go(".main")
是一个函数调用。所以$ state.go()在你的代码中被$ state.go()的返回值替换,产生了这个:
return $state.go(".main");
|
V
return <some value>;
控制器看起来像这样:
app.controller("MyCtrl", function() {
//This is a callback function
})
回调函数是您未调用的函数,因此您无法访问返回值。如果您定义这样的函数:
function add(x, y) {
return x+y;
}
然后你可以写:
var result = add(3, 4);
add(3,4)是一个函数调用,因此在代码中用它的返回值替换它,产生这个:
var result = 7;
您也可以像这样调用该函数:
add(3,4);
和javascript将用函数的返回值替换函数调用,产生:
7;
这是合法的js,并且由于该值未分配给变量,因此将被丢弃。
您永远不会在代码中调用控制器的回调函数。相反,您将回调函数作为参数传递给angular的控制器()函数,该函数可能定义如下:
function controller(name, callback) {
...
...
if(attr.name === "ng-controller" && attr.value === name) {
callback();
}
}
答案 1 :(得分:0)
你正在函数中返回...返回只是停止执行该函数,如果调用你的控制器的函数没有将结果存储在变量中,则无人关心你返回的内容。