将一个return语句放在angular.js控制器中是什么意思

时间:2014-12-01 07:54:40

标签: angularjs

我在angular.js控制器中有一个if语句,如果满意则会改变我的应用程序的$状态。

这是一行:

    if ($scope.cond1)
        $state.go(".main");
.. rest of controller code

如果满足此条件,我希望控制器代码停止继续。 我通过将其改为:

来实现这一目标
    if ($scope.cond1)
        return $state.go(".main");
.. rest of controller code

我不明白为什么回归在这里工作。它究竟做了什么。我一直在写角度,我从来没有以这种方式使用'返回'。

我习惯在函数内部使用它,它在这里是如何工作的?

2 个答案:

答案 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)

你正在函数中返回...返回只是停止执行该函数,如果调用你的控制器的函数没有将结果存储在变量中,则无人关心你返回的内容。