2012-10-09 11 views
6

que tienen forma¿Cómo aplicar los cambios en angularjs (ng-show)?

<form ng-controller="SessionController" name="login_form"> 
    <div class="hide" ng-show='invalid_credentials'>Invalid email/pass</div> 
    <input type="submit" value="Login" ng-click='login()'> 
</form> 

controlador:

utApp.controller('SessionController', ($scope, $cookieStore, ClientService) -> 
    $scope.login = -> 
    ... 
    if something 
     $scope.invalid_credentials = true 
     return 

en algunas condiciones $scope.invalid_credentials está consiguiendo el valor true, pero no se muestra div con el mensaje de error. Cómo mostrarlo?

Respuesta

8

Angular no vuelve a verificar el valor de su variable invalid_credentials. Usar una función como su argumento ng-show debería funcionar.

+0

bien. he cambiado ng presentas a 'invalid_credentials()' función añadida $ scope.invalid_credentials = -> console.log ($ scope.invalid_credentials_value) $ scope.invalid_credentials_value y el estado cambiado para establecer invalid_credentials_value. Como veo en la consola, se muestra verdadero después de hacer clic en iniciar sesión. pero div aún está oculto –

+0

¿Su función también es verdadera? – netmute

+0

sí. resuelto quitando la clase 'hide' de div –

2

La respuesta aceptada funcionará ... Sin embargo, lo que realmente se necesita hacer es utilizar $ alcance. $ Aplican

utApp.controller "SessionController", ($scope, $cookieStore, ClientService) -> 
    $scope.login = -> 
    if something 
     $scope.$apply (s) -> 
     s.invalid_credentials = true 

En general, cuando se actualiza el alcance, y no se actualiza la interfaz de usuario ... es porque necesita usar $apply.

+0

valioso get TypeError: Object # no tiene método 'apply' –

+2

si uso $ apply en lugar de apply me sale Error: $ apply ya en progreso –

+0

Interesante. si apply ya está en progreso, entonces sin $ apply, todo debería ser kosher, ya que $ apply asegura que se llame $ digest. Si el método $ eval funciona, adelante y úselo, supongo. Pero no deberías tener que hacerlo. –

Cuestiones relacionadas