У меня есть директива AngularJS, которая содержит текстовый ввод, который имеет собственную модель, которая получает значение из области действия контроллера через директиву ng-model.
Взгляните на это перо (и код ниже): http://codepen.io/ericwshea/pen/KwXRyr а>
Проблема в том, что иногда эта модель оказывается нулевым или неопределенным значением, и в этом случае я хотел бы использовать ngModelController для ввода текста, чтобы отформатировать отображение нулевого значения в текстовом вводе, чтобы оно было чем-то вроде «NULL».
Это работает, если значение представляет собой некоторую произвольную строку, которую я сопоставляю в средстве форматирования, но не в том случае, если значение равно null (я также тестировал с неопределенными, теми же результатами).
Любое понимание/обходной путь по этому поводу, или это просто недостаток $formatters?
HTML:
<div ng-app="app" class="container">
<div ng-controller="ctrl" class="col-md-12">
<form>
<input-directive ng-model="model"></input-directive>
<input-directive ng-model="model2"></input-directive>
<div ng-if="model">Model 1: {{model}}</div>
<div ng-if="model2">Model 2: {{model2}}</div>
</form>
</div>
</div>
ЯВАСКРИПТ:
angular.module('app', [])
.controller('ctrl', function($scope) {
$scope.model = null;
$scope.model2 = 'make this null';
})
.directive('inputDirective', function() {
var template =
'<div>'+
'<div class="input-group">'+
'<input type="text" class="form-control" ng-model="localModel">'+
'<span class="input-group-btn">'+
'<button ng-click="save()" class="btn btn-default" type="button">Save</button>'+
'</span>'+
'</div>'+
'</div>';
function link (scope, elem, attr) {
var inputModelCtrl = elem.find('input').controller('ngModel');
function formatter(val) {
if (val === 'make this null') {
return scope.nullValue;
}
if (val === null) {
return scope.nullValue;
}
return val;
}
scope.nullValue = 'NULL';
scope.localModel = scope.ngModel;
scope.save = function() {
scope.ngModel = scope.localModel;
}
inputModelCtrl.$formatters.push(formatter);
}
return {
restrict: 'E',
replace: true,
require: 'ngModel',
template: template,
link: link,
scope: {
ngModel: '='
}
}
})
;