Я работаю с angularjs уже несколько недель и не понимаю, о чем думали дизайнеры angularjs при разработке функций $viewValue и $modelValue из ngModelController. Пример кода:
index.html:
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@*" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.18/angular.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="PlunkerApp" ng-controller="mainController">
<listfield ng-model="termList"></listfield>
</body>
</html>
script.js:
var plunkerModule = angular.module('PlunkerApp', []);
plunkerModule.directive('listfield', function() {
'use strict';
var link = function(scope, element, attrs, ngModelController) {
console.log('listfield.link():', scope);
ngModelController.$parsers.push(function(value) {
console.log('listfield.model.parser:', value);
return value ? value.join(', ') : undefined;
});
ngModelController.$formatters.push(function(value) {
console.log('listfield.model.formatter:', value);
return value ? value.split(/,\s*/) : undefined;
});
}
return {
restrict: 'E',
link: link,
require: 'ngModel',
scope: {
ngModel: '='
},
template: '<input type="text" ng-model="ngModel">'
};
});
plunkerModule.controller('mainController', function($scope) {
$scope.termList = "";
$scope.$watchCollection('termList', function(newValue, oldValue) {
console.log('mainController.watch.list:', newValue);
});
});
ссылка на плункер: http://plnkr.co/edit/T5a8zEQuRyYWnpsZZV9W?p=preview
Таким образом, в этом приложении значение из элемента ввода директив записывается в глобальную область видимости, что отлично работает! Моя проблема в том, что меня не интересует «необработанное» строковое значение, мне нужен массив, сгенерированный средством форматирования, но элемент ввода все равно должен отображать строковое значение.
Как мне это сделать??
С нетерпением жду ваших ответов.