2013-09-24 2 views
0

HTMLвхода с директивой

<input type="text" name="usernr" ng-model="userNr" placeholder="user nr" 
           tabindex="2" ng-usernumber/> 

яваскриптом

app.directive('ngUserNumber', function() { 
      return { 
       restrict: 'A', 
       require: 'ngModel', 
       link: function(scope, elm, attrs, ctrl) { 
        console.log("inside directive"); 
        ctrl.$parsers.push(function(data) { 
         console.log("//convert data from view format to model format"); 

         data = data.toString() + " test"; 

         return data; //converted 
        }); 

        ctrl.$formatters.push(function(data) { 
         console.log("//convert data from model format to view format"); 

         data = data.toString() + " test"; 

         return data; //converted 
        }); 
       } 
      }; 
     }); 

Я хотел бы заменить данные, предоставляемые нг-моделью, с данными внутри директивы. Но ничего не происходит. Почему не используется пользовательская директива?

Я последовал за этот документ: http://www.ng-newsletter.com/posts/directives.html
другой источник: https://stackoverflow.com/a/15346236/489856

+0

Является ли функция связи вызывается \ выполнена? – Chandermani

+0

Нет (журналы не выполняются) – Vincent

+2

Ваше название директивы в html должно быть 'mg-user-number' – Chandermani

ответ

1

сделать это только так:

var app = angular.module('MyApp', []); 

app.controller('MyCtrl', function($scope){ 

    }); 

app.directive('ngUsernumber', function() { 
      return { 
       restrict: 'A', 
       require: 'ngModel', 
       link: function(scope, elm, attrs, ctrl) { 

        var format = function(data){ 
         console.log("//convert data from view format to model format"); 

         if(data !== undefined){ 
          data = data.toString() + " test"; 
         } 


         return data; //converted 
        }; 

        ctrl.$parsers.push(format) 
        ctrl.$formatters.push(format); 

       } 
      }; 
     }); 

Working plunkr здесь: http://plnkr.co/edit/iA85KC?p=preview

Вы должны соблюдать верблюжьего для директивы note: ngUsernumber -> ng-usernumber, если вы сделаете ngUserNumber -> ng-user-number

Надеюсь, это поможет!

+0

Ваш plnkr, выглядит нормально. Но «тест» не добавляется? – Vincent

+0

Я обновляю plunlkr, если вы посмотрите под ввод хорошей строки, напечатайте –

+0

ng-model = double binding. Итак, как же только абзац показывает «тест yourtypedstring», а поле ввода не добавляет тест в ng-Model? – Vincent

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