2013-11-08 2 views
0

Я пытаюсь получить содержимое в bootstrap popover для изменения, когда пользователь вводит что-то в текстовое поле электронной почты. Кажется, что ng-change не попадает в метод updateToolTip(). Я совершенно новый для AngularJS. Любые советы приветствуются.AngularJS ng-change не вызывающая функция

HTML страницы

<div ng-controller="LoginController"> 

    <for name="form" ng-submit="login()"> 

    <input type="email" name="email" ng-model="user.email" value="{{user.email}}" ng-change="updateToolTip()" popover="{{emailMessage}}" popover-trigger="focus" popover-placement="right" required> 

    <button class="btn btn-lg btn-primary btn-block" type="submit" ng-disabled="form.$invalid">Sign in</button> 
    </form> 

</div> 

JS

var loginModule = angular.module('loginModule', ['ui.bootstrap']); 

// Controller for the login page 
loginModule.controller('LoginController', ['$scope', '$http', function($scope, $http) { 

    $scope.emailMessage = 'test'; 

    $scope.updateToolTip = function() { 

     $scope.emailMessage = 'asdfsadf'; 
     console.log(); 
     console.log(' inside function'); 
     if($scope.user != null) { 
      console.log('user not null'); 
      if($scope.user.email.$dirty && $scope.user.email.$error.email) { 
       console.log('email dirty and error'); 
       $scope.emailMessage = 'Invalid Email!'; 
      } else if($scope.form.email.$dirty && $scope.form.email.$error.required) { 
       console.log('emaildirty and required'); 
       $scope.emailMessage = 'Email Required'; 
      } 
     } 
    } 
}]); 
+0

Вы можете создать plunker/jsfiddle таким образом мы можем увидеть его в действии? – jpmorin

+0

@ Catfish, не входя в глубины вашего кода, используете ли вы JQuery? У меня были проблемы с двумя woking вместе и, наконец, переместил загрузку JS в нижний колонтитул страницы. – avrono

+0

Не связано с вопросом, но при использовании ng-модели на входе нет необходимости устанавливать атрибут value, поскольку он будет обрабатываться нг-модель! – jpmorin

ответ

4

Изменить form имя name="user". Как

<form class="form-signin" name="user" ng-submit="login()"> 

Поскольку вы используете форму модели, как user.XXXX.

Демо Plunker

[EDIT]

Я хотел бы написать проверку так:

<input 
    type="email" 
    name="email" 
    class="form-control" 
    placeholder="Email address" 
    ng-model="user.email" 
    popover="{{emailMessage}}" 
    popover-trigger="focus" 
    popover-placement="right" 
    required 
    > 
    <span class="error" ng-show="mailform.email.$error.required">required</span> 
    <span class="error" ng-show="mailform.email.$error.email">invalid email</span> 


    <input 
    type="password" 
    name="password" 
    class="form-control" 
    placeholder="Password" 
    ng-model="user.password" 
    value="{{user.password}}" required > 
    <span class="error" ng-show="mailform.password.$error.required">required</span> 

Демонстрация 2 Plunker

А может быть, этот пример может помочь вам, а также: Demo 3 Plunker

+0

@jpmorin это ответ на его вопрос, проверьте опубликованный PLunker после определения правильного имени 'form',' ng-chage' работает как ожидалось –

+0

Спасибо за это. Мне очень нравится этот трюк, который я вижу в вашем коде '{{user | json}}'. Можете ли вы объяснить, почему, когда я печатаю адрес электронной почты, когда вы печатаете, 'user.email' исчезает, пока не будет действительным электронным письмом? – Catfish

+0

@Catfish, что происходит потому, что угловая поддержка 'input' с' type = "email". Этот тип не действует, пока он не будет действительным адресом электронной почты. Модель не установлена, пока она не будет действительной. –

Смежные вопросы