私は数週間 angularjs を使用していますが、 ngModelController から $viewValue および $modelValue 機能を設計するときに angularjs デザイナーが考えたことがわかりません。コード例:
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
したがって、このアプリケーションでは、ディレクティブの入力要素からの値がグローバル スコープに書き込まれ、正常に動作します。私の問題は、「生の」文字列値には興味がないことです。フォーマッタによって生成された配列が必要ですが、入力要素には文字列値が表示されます。
どうやってやるの??
回答をお待ちしております。