[英]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.