Угловой набор настроек угловойJS ng-model-options

Я только что обновился до угловой версии 1.3.8.

При использовании версии 1.2.23 я создал директиву для преобразования вида формы данных в модель и наоборот.

Это моя директива:

.directive('dateConverter', ['$filter', function ($filter) { return { require: 'ngModel', link: function (scope, element, attrs, ngModelController) { // Convert from view to model ngModelController.$parsers.push(function (value) { return $filter('date')(new Date(date), 'yyyy-MM-ddTHH:mm:ss') }); // Convert from model to view ngModelController.$formatters.push(function (datetime) { return $filter('date')(datetime, 'MM/dd/yyyy'); }); } }; }]); 

});

Я вижу здесь, что getters и seters в привязке теперь поддерживаются, но я не могу найти нигде, как использовать как getters, так и seters. Есть ли способ сделать это? То есть – может ли ng-model-options заменить мою директиву конвертировать?

благодаря

Документация может показаться немного нечеткой, но использование довольно простое. Что тебе необходимо сделать:

  1. HTML:

      
  2. в JS-controllerе вместо фактической модели создайте функцию, которая вернет значение (+ apply stripping), если нет переданного параметра и который обновит модель (+ применить другие изменения), если параметр отправлен.

Геттер / сеттеры – это в основном другой «слой» между значением представления и значением модели.

Пример:

 $scope.pageModel.firstName = ''; $scope.pageModel.myGetterSetterFunc: function (value) { if (angular.isDefined(value)) { $scope.pageModel.firstName = value + '...'; } else { return $scope.pageModel.firstName.substr(0, $scope.pageModel.firstName.lastIndexOf('...') ); } } 

DEMO PLUNKER: http://plnkr.co/edit/Zyzg6hLMLlOBdjeW4TO0?p=preview

(проверьте консоль – http://screencast.com/t/3SlMyGnscl )

ПРИМЕЧАНИЕ. Было бы интересно посмотреть, как это будет выглядеть с точки зрения повторного использования. Я бы посоветовал создавать эти геттеры / сеттеры как экстернализированные методы многократного использования и иметь для них генераторы (поскольку для каждого случая модель данных различна). А в controllerах можно назвать только эти генераторы. Только мои 2 цента.

Этот вопрос довольно старый, но для IE9 + (и, конечно, всех других соответствующих браузеров) вы можете использовать метод getter / setter ECMAScript 5, который я бы предпочел против опции gterterSetter ng-model:

 var person = { firstName: 'Jimmy', lastName: 'Smith', get fullName() { return this.firstName + ' ' + this.lastName; }, set fullName (name) { var words = name.toString().split(' '); this.firstName = words[0] || ''; this.lastName = words[1] || ''; } } person.fullName = 'Jack Franklin'; console.log(person.firstName); // Jack console.log(person.lastName) // Franklin 

Этот пример приведен на http://javascriptplayground.com/blog/2013/12/es5-getters-setters/

Interesting Posts

Что означает -> означает в C ++?

Автоматически выполняемые функции при загрузке разделяемых библиотек

Скопируйте файлы в Linux, избегайте копирования, если файлы существуют в месте назначения

Как использовать ConcurrentLinkedQueue?

Переменные в кронтабе?

Excel (2010) HYPERLINK: как вызвать файл с аргументами командной строки и пробелами в пути?

Удалить элемент из массива

Как заставить make / gcc показать мне команды?

Сплит / подмножество кадра данных по факторам в одном столбце

Как использовать двухдиапазонную карту Wi-Fi для одновременного подключения к 5 ГГц и 2,4 ГГц в Windows?

IE11 – невозможно добавить сайт в избранное

Весенняя загрузка добавляет перехватчики http-запросов

Можем ли мы увеличить повторное использование этой ключевой схемы защиты доступа?

Легкий способ индексирования STDOUT (форматировать текст в столбцах)?

Пароль Защитите SQLite DB. Является ли это возможным?

Давайте будем гением компьютера.