Показать сообщение отдельно
  #3 (permalink)  
Старый 16.06.2019, 04:41
Кандидат Javascript-наук
Отправить личное сообщение для dpts Посмотреть профиль Найти все сообщения от dpts
 
Регистрация: 12.05.2015
Сообщений: 111

Сообщение от Ким чен ин Посмотреть сообщение
вообще так нельзя делать...
А почему так нельзя делать?
Дело-то скорее всего не в том, что обрезка завернута в computed потому что, можно например так:
<script  type="text/javascript">
    	Vue.component('vt-input', {
    		data: function () {
				return {
					pattern: /^\+\d{11}$/g,  
					max:12,             
		                res:{
		               	    valid:Boolean,
		               	    value:String
		                }
			    }
			},
			mounted:function(){
				this.res.value = this.value.value;
			},
			props: {
				value:{
					type:Object
				}
			},
			template: `
				<div>
					<input  
						v-model="res.value"
						v-on:input="$emit(\'input\', vtReturn($event.target.value))">
				</div>
			`,
			methods:{
				vtReturn:function(str){
					if (str.length > this.max){
						this.res.value = str.substr(0,this.max);
					}
					this.res.valid = this.pattern.test(this.res.value);
					return this.res;
				}
			}
    	});
    </script>
</head>
<body>
	<div id="app">
		<vt-input v-model="inputVal"></vt-input>
	</div>
	<script  type="text/javascript">
		var vm = new Vue({
			el: '#app',
			data () {
				return {
					inputVal:{
						valid:Boolean,
						value:'+12345678901'
					}
				}
			}
		});
	</script>
</body>

С тем же результатом - проверкой срабатывающей через раз.

Последний раз редактировалось dpts, 16.06.2019 в 05:57.
Ответить с цитированием