簡體   English   中英

在AngularJS中重構這樣的范圍操作的更好方法是什么?

[英]Better way to refactor $scope operations like this in AngularJS?

我的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上有很多操作,看起來有些笨拙。.是否有人對如何重構它有建議?

我遵循John Papa風格指南,他建議使用帶有$ scope的經典控制器的控制器語法。 以下是他的陳述:

使用帶有$ scope語法的經典控制器上的controllerAs語法。

controllerAs語法使用此內部控制器綁定到$ scope

為什么?:controllerA是$ scope之上的語法糖。 您仍然可以綁定到View並仍然訪問$ scope方法。

為什么?:有助於避免在控制器內部使用$ scope方法的誘惑,而在其他情況下最好避免使用它們或將其移至工廠。 考慮在工廠或需要時在控制器中使用$ scope。 例如,當使用$ emit,$ broadcast或$ on發布和訂閱事件時,請考慮將這些使用移至工廠並從控制器調用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM