2015-05-13 45 views
1

我跑进前些天下的代码块返回一个值,而我试图找出到底为什么笔者可能选择return init();,而不是做一些像AngularJS - 明确从控制器

$scope.init = function() {...}; 

并用ng-click或其他东西来称呼它。 下面的代码:

myApp.controller("PlaylistCtrl", [ 
    "$scope", "tracksService", function($scope, tracksService) { 
    var init; 
    init = function() { 
     $scope.addTrack("Jay-Z - 99 Problems"); 
     return $scope.tracks = $scope.getTracks(); 
    }; 
    $scope.getTracks = function() { 
     return tracksService.tracks(); 
    }; 
    $scope.addTrack = function(trackTitle) { 
     if (trackTitle !== "") { 
     return tracksService.addTrack(trackTitle); 
     } 
    }; 
    return init(); 
    } 
]); 

所以当看台上的问题是:什么是从控制器返回值的目的是什么?它利用了哪些附加功能?这是否会导致init()在控制器启动后运行 - 如果没有,那么这里的具体用途是什么?任何帮助表示赞赏。谢谢。

+1

控制器的返回值是控制器对象实例 - 播放列表控件。因此,您可以添加属性和方法来附加到控制器的“返回值”,而不是将它们附加到继承的$ scope变量。有关更多详细信息,请参阅http://toddmotto.com/digging-into-angulars-controller-as-syntax/。 –

回答

1

没有具体的含义,因为删除return不会改变任何东西。

如果你看看其他功能,那么开发人员似乎有从每个功能返回的习惯,即使没有必要。

这可能只是一种习惯。在某些情况下,它可以帮助开发人员确保初始化块的结束,将函数声明放在下面,例如在这个小例子中:

// Initialization 
var foo = 'bar'; 
doFoo(); 
doBar(); 

return; // <- end of declarative block 

// Methods 
function doFoo() { ... } 
function doBar() { ... } 
+0

http://jsfiddle.net/gvJdn/158/ 在这个小提琴中,看起来'''init()''导致init函数在启动时运行(请注意'''{{tracks} }'''在没有返回'''init()'的情况下被填充 - '''''''''''''''你不需要显式地将init''附加到$''''''''''' (')'''运行? –

+0

我不是超级舒适的这种语法(CoffeScript?),但我可以向你保证不,返回'init()'或不会对Angular循环产生任何影响,但当然会调用它,'init()'由控制器执行,这意味着只要应用程序由Angular编译(或引导),''{你不需要触发任何东西来让一个控制器运行它的代码 – floribon

+0

真棒。感谢您的帮助。 –