2015-02-12 47 views
0

我CoffeeScript的代码看起来像这样

.controller('SignInController', 
    ($scope, CONFIG, restAuth, cookieAuth) -> 
     $scope.signInData = {} 
     $scope.res = {} 
     # TODO: Refactor this to service 

     $scope.processRegistration = -> 
      console.log($scope.signInData) 
      restAuth.post('signin', $scope.signInData) 
      .then(((data) -> 
        if data.res >= 0 
         $scope.res.signInSuccess = true 
         $scope.res.msg = 'You finished login successfully.' 
         cookieAuth.setCookie(data) 
        else 
         $scope.res.signInSuccess = false 
         $scope.res.msg = 'Your login failed. (#{ data.description })' 
       ), 
       (-> 
        $scope.res.signInSuccess = false 
        $scope.res.msg = 'Sorry, it seems that the server is not responding. Please try again later!') 
      ) 


     return 
) 

.controller('SignUpController', 
    ($scope, $http, CONFIG) -> 
     $scope.signUpData = {} 
     $scope.res = {} 
     # TODO: Refactor this to service 

     $scope.processRegistration = -> 
      $http 
      .post('#{ CONFIG.ROOT }/auth/signup', $scope.signUpData) 
      .success (data) -> 
       if data.res >= 0 
        $scope.res.signUpSuccess = true 
        $scope.res.msg = 'You finished registration successfully.' 
       else 
        $scope.res.signUpSuccess = false 
        $scope.res.msg = 'Your registration failed. (#{ data.description })' 
      .error(-> 
       $scope.res.signUpSuccess = false 
       $scope.res.msg = 'Sorry, it seems that the server is not responding. Please try again later!' 
      ) 

     return 
) 

可以看出,上有$scope许多操作,它看起来如何重构这个有一点笨拙..有没有人有什么建议?

+2

把它们的服务。如果您在html中使用该函数,则所有范围函数都可以调用服务函数。 – Gustav 2015-02-12 07:01:49

回答

0

我遵循John Papa风格指南,他推荐controllerAs使用$ scope作为经典控制器的语法。以下是他陈述的内容:

在$ scope 语法中使用经典控制器上的controllerAs语法。

的controllerAs语法使用其获取绑定 至$范围

为什么?:controllerAs超过$范围语法糖这里面的控制器。您仍然可以将 绑定到View并仍然访问$ scope方法。

为什么?:有助于避免在控制器内使用$ scope方法的诱惑,否则它可能会更好地避免它们或将它们移动到工厂。考虑在工厂使用$ scope,或者在需要时在控制器中使用$ scope。例如,当使用$ emit,$ broadcast或$发布和订阅事件时,考虑将 这些用途移到工厂并从控制器调用。

您可以在此找到完整的准则: https://github.com/johnpapa/angularjs-styleguide

相关问题