Этот код работал с angular-1.2.26, но не с angular-1.3.0.rc5 (или любыми версиями 1.3.x, которые я пробовал).
Я нашел эту проблему https://github.com/angular/angular.js/issues/9218 на github angular, но я не знаком с интерфейсом github и не могу понять, подтверждена ли ошибка или ожидается ли такое поведение, исправлена она или нет; и если да, то какую версию брать.
JSFiddles:
Для каждого я ожидаю, что при загрузке страницы будет введена «моя метка». Для первого работает, для второго нет.
И посмотрите в консоли, какое значение передается форматтеру.
HTML:
<div ng-controller="ctrl as c">
<input my-dir ng-model="c.foobar" />
<pre>{{c.foobar | json}}</pre>
</div>
JS :
var app = angular.module('app', []);
app.controller('ctrl', function(){
this.foobar = {
value : 'my value',
label : 'my label'
}
})
.directive('myDir', function(){
return {
restrict :'A',
require:'ngModel',
link : function(scope, elt, attrs, modelCtrl){
// conversion "view -> model"
modelCtrl.$parsers.unshift( function(value){
console.log('Value:', value);
return {label:value, value:value};
})
// conversion "model -> view"
modelCtrl.$formatters.unshift(function formatter(modelValue){
console.log('modelValue:', modelValue);
return modelValue.label;
})
}
}
})