我的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
上有很多操作,看起来有点笨拙。有人有关于如何重构这个的建议吗?
答案 0 :(得分:0)
我遵循John Papa风格指南,他建议使用带有$ scope的经典控制器的控制器语法。以下是他所说的:
使用带有$ scope的经典控制器的controllerAs语法 语法。
controllerAs语法使用绑定的内部控制器 到$ scope
为什么?:controllerAs是超过$ scope的语法糖。你仍然可以绑定 到View并仍然访问$ scope方法。
为什么?:帮助避免在一个内部使用$ scope方法的诱惑 控制器,否则可能更好地避免它们或移动它们 去工厂。考虑在工厂中使用$ scope,或者如果在 控制器只在需要时。例如,发布时和 使用$ emit,$ broadcast或$订阅事件考虑移动 这些用于工厂并从控制器调用。
您可以在此处找到完整的指南: https://github.com/johnpapa/angularjs-styleguide