这是我的场景。如果表单收到错误消息,我想刷新我的验证码。而且我有多个视图可以使用验证码。
所以我写了一个工厂:
Services.factory 'Captcha', ['$rootScope', ($rootScope) ->
service = {}
service.new_captcha = () ->
console.log 'render cap'
$rootScope.captcha_src = "/captcha?action=captcha&i=#{+new Date}"
service
]
然后另一个处理 $http 进程的工厂将触发下面的代码
$http
.error (data) ->
service.signin_err_msg = data.error
Captcha.new_captcha()
$rootScope.$broadcast('new_captcha')
在视图控制器中,$scope 值会监听广播并改变 src 值。
SignUpCtrl = App.controller 'SignUpCtrl', ($scope, UserService, $location, $rootScope) ->
$scope.UserService = UserService
$scope.$on 'new_captcha', (val) ->
$scope.captcha_src = $rootScope.captcha_src
$scope.captcha_src = $rootScope.captcha_src
这行得通。但我不认为这是一个好方法。我必须编写相同的代码来监听 rootScope 广播。有没有更好的相同方法?