在AngularJS中重构这样的范围操作的更好方法是什么?

时间:2015-02-12 06:52:52

标签: javascript angularjs coffeescript

我的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上有很多操作,看起来有点笨拙。有人有关于如何重构这个的建议吗?

1 个答案:

答案 0 :(得分:0)

我遵循John Papa风格指南,他建议使用带有$ scope的经典控制器的控制器语法。以下是他所说的:

  

使用带有$ scope的经典控制器的controllerAs语法   语法。

     

controllerAs语法使用绑定的内部控制器   到$ scope

     

为什么?:controllerAs是超过$ scope的语法糖。你仍然可以绑定   到View并仍然访问$ scope方法。

     

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

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