2014-10-13 3 views
0

У меня есть модальный сервис, который я использую для своих Модалей. В службе я передаю область действия контроллера, так что вид модала имеет доступ к объекту области видимости. Когда я обновляю область с помощью функции, значение никогда не обновляется.Angularjs не обновляет область при вызове функции?

Я попытался использовать $ apply, но eror, который я получаю, состоит в том, что цикл дайджеста уже запущен.

Так вот код

.controller('LoginCtrl', ($scope, $location, $rootScope, Modal, $log, $http) -> 

    $scope.placeholder = { 
    email: 'Email Address', 
    password: 'password' 
    } 

    $scope.login = (email, password)-> 
    $http.post('/dashboard/login', { 
     email: email, 
     password: password 
    }).error((data, status)-> 
     $scope.invalidPassword = "lalala" 
     $scope.$apply() 
    ).success (data, status) -> 
     $rootScope.userAuth = true 
     $rootScope.userInfo = data 
     $state.go('dashboard') 
     $modalInstance.close() 

    Modal.custom("modal-login2.jade",$scope, #here is where I pass the controller's scope as the scope for the Modal 
    keyboard: false 
    backdrop: 'static' 
) 

) 

Тогда мой нефритовый

div 
    script(type='text/ng-template' id="modal-login2.jade") 
    .modal-header 
     h3.modal-title Login into Dashboard 
    .modal-body 
     form(name="loginForm", novalidate).form-horizontal 
      .row.alert.alert-danger(ng-show='invalidPassword') 
      span(translate) The specified e-mail or password was invalid ! 
      .row.form-group 
      label.col-xs-3.control-label(for='email') E-mail 
      .col-xs-9 
       input.form-control(required, ng-model='email', type='email', name='email', placeholder="{{ placeholder.email }}") 
      .row.form-group 
      label.col-xs-3.control-label(for='password') Password 
      .col-xs-9 
       input.form-control(required, ng-minlength=6, ng-model='password', type='password', name='password', placeholder="{{ placeholder.password }}") 
    .modal-footer 
     .col-xs-offset-2.col-xs-3 
     button.btn.btn-primary(type='submit', translate, 
      ng-click='login(email, password)', ng-disabled='loginForm.$invalid || waitText') Sign in 
+0

Вместо $ apply использовать '$ timeout' без указания времени, он лучше работает, потому что $ timeout schedule change на модели для следующего дайджеста вместо того, чтобы форсировать его - что дает вам дайджест уже в ошибке цикла – maurycy

+0

Как я должен использовать $ таймаут, чтобы отложить применение или задержать изменение переменной области видимости? – grasshopper

+0

использовать $ timeout, так как вы бы использовали $ appyly, '$ timeout (function() {$ scope.model = value})' – maurycy

ответ

0

Так при попытке доступа сферы модального мне нужно использовать этот вместо $ объем.

Таким образом, вместо

$scope.model 

следует использовать

this.model 

Я не совсем уверен, почему, но я думаю, что он должен с сервисом модальной.