Обновить модель из угловой директивы

0

Я пытаюсь обновить элемент из директивы размытия, но меняет вид, а не модель.

app.directive('myDirective', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ctrl) {
      element.bind('blur', function(e) {
        element[0].value = 'new val';
      }); 
    }
  };
});

Я создал простой сюжет, освещая этот вопрос: https://plnkr.co/edit/yicenDSHNagapXxP7yrF?p=preview

У многих людей, похоже, есть эта проблема, и есть много советов о том, как изменить конкретную модель, используя функцию в области. Но я хочу, чтобы убрать эту директиву на любой вход, такой жесткий код, модель для изменения не будет работать здесь.

Я пробовал использовать $ apply, как обсуждалось здесь, но и не работает. http://nathanleclaire.com/blog/2014/01/31/banging-your-head-against-an-angularjs-issue-try-this/. Что мне не хватает?

Благодаря,

Теги:

1 ответ

1
Лучший ответ

попробуйте это (plunker):

var app = angular.module('myApp', []);
app.controller('myCtrl', ['$scope', function($scope) {

  $scope.myVal = 'Demo';

}]);

    app.directive('myDirective', function() {
      return {
        require: '^ngModel',
        scope:{ngModel:'='},
        link: function(scope, element, attrs, ctrl) {
          element.bind('blur', function(e) {
            scope.ngModel='new val';
            scope.$apply();
          }); 
        }
      };
    });
  • 0
    Отлично! Что за ^ когда вам требуется ngModel? Работает с этим и без него?
  • 0
    это означает, что для работы директивы требуется атрибут ngModel со значением в том же элементе, что и myDirective . Таким образом, параметр ctrl функции link отражается в ngModelController. Для получения дополнительной информации нажмите здесь NgModelController

Ещё вопросы

Сообщество Overcoder
Наверх
Меню