2015-09-03 2 views
1

У меня есть привязка к ng-модели, но я хочу показать значение по умолчанию, если оно не было затронуто ($pristine). Есть ли хороший способ сделать это? Я не могу просто установить значение ng-model в значение null во время инициализации. Вот мой plunker: http://plnkr.co/edit/0kzKrwKTbJzsMGG8D1gQ?p=preview

<body ng-controller="inputController"> 
    <input type="number" id="pricefield" min="0" name="price" placeholder="Price" ng-model="test.value" required/> 

</body> 

angular.module('plunker', []); 
function inputController($scope) { 
    $scope.test = {value: 0}; 
} 

ответ

1

Вы можете использовать ng-attr директивы, чтобы установить значение замещающего динамически, чтобы проверить форму элемент pristine или вам не нужно, чтобы поместить это поле внутри form &, то вы можете легко проверить $pristine свойство этого элемента формы, как myForm.price.$pristine.

Markup

<form name="myForm"> 
    <input type="number" id="pricefield" min="0" name="price" ng-model="test.value" 
    ng-attr-placeholder="{{myForm.price.$pristine ? 'Some Value': 'Default Value'}}" required/> 
</form> 

Demo Plunkr

Update

Я хотел бы предложить, чтобы иметь одну директиву, которая изменит скрыть $viewValue на начальной загрузки & покажет заполнитель. Директива будет иметь контроллер над значением отображения с помощью $formatters на ngModelControlller

разметке

<input type="number" custom-dir id="pricefield" min="0" name="price" 
ng-attr-placeholder="{{myForm.price.$pristine ? 'Initial Placeholder': 'After change Placeholder'}}" 
ng-model="test.value" required/> 

Директива

app.directive('hideInitialLoad', function() { 
    return { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, element, attr, ngModel) { 
     var initalHide = true; 
     //format text going to user (model to view) 
     ngModel.$formatters.push(function(value) { 
     console.log(attr.min > value) 
     if (initalHide){ 
      initalHide = false; 
      return undefined; 
     } 
     return value; 
     }); 
    } 
    }; 
}); 

Updated Demo

+0

Привет, @Pankaj Parkar, спасибо за это. однако, во время инициализации мне нужно будет установить ng-model в 0, и если я это сделаю, это не будет работать. (скрыть начальное значение и отобразить местозаполнитель) – WABBIT0111

+0

@ WABBIT0111 вы могли бы установить 'min =" 1 "' ..will work http://plnkr.co/edit/DzC5XyzXCmAGhTJgROCk?p=preview –

+0

nope, вы можете иметь 0, так что min не может быть 1 – WABBIT0111