MCPcopy Index your code
hub / github.com/ygs-code/vue / genDefaultModel

Function genDefaultModel

vue.js:10319–10385  ·  view source on GitHub ↗
(
        el, //虚拟dom
        value, //属性在view 的值
        modifiers   //标签类型对象  修饰符
    )

Source from the content-addressed store, hash-verified

10317 }
10318 // 如果虚拟dom标签是 'input' 类型不是checkbox,radio 或者是'textarea' 标签的时候,获取真实的dom的value值调用 change或者input方法执行set方法更新数据
10319 function genDefaultModel(
10320 el, //虚拟dom
10321 value, //属性在view 的值
10322 modifiers //标签类型对象 修饰符
10323 ) {
10324 console.log(el)
10325 console.log(value)
10326
10327 var type = el.attrsMap.type; //获取类型
10328
10329 // warn if v-bind:value conflicts with v-model 警告如果v-bind:值与v-model冲突
10330 // except for inputs with v-bind:type 除了输入v-bind:type
10331 {
10332 var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
10333 var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
10334 if (value$1 && !typeBinding) { //如果type属性没有则发出警告
10335 var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
10336 warn$1(
10337 binding + "=\"" + value$1 + "\" conflicts with v-model on the same element " +
10338 'because the latter already expands to a value binding internally'
10339 );
10340 }
10341 }
10342
10343 var ref = modifiers || {};
10344 var lazy = ref.lazy; //只有在焦点不集中时,才应该更新带有lazy的输入 失去焦点
10345 var number = ref.number; //数字
10346 var trim = ref.trim; //去除两边空格
10347 var needCompositionGuard = !lazy && type !== 'range'; //如果不是滑动类型input
10348 var event = lazy ? //获取类型事件 可以是change或者是input 事件
10349 'change'
10350 : type === 'range' ? //判断是否是滑动块
10351 RANGE_TOKEN //'__r'虚拟dom渲染函数
10352 : 'input';
10353
10354 var valueExpression = '$event.target.value';
10355 if (trim) {
10356 valueExpression = "$event.target.value.trim()"; //获取真实dom的value
10357 }
10358 if (number) {
10359 valueExpression = "_n(" + valueExpression + ")";
10360 }
10361 //更新值
10362 // * 返回 key"=" value
10363 // * 或者 $set(object[info],key,value)
10364 var code = genAssignmentCode(
10365 value, //v-model 的属性值
10366 valueExpression //真实dom的value
10367 );
10368 if (needCompositionGuard) { //如果不是滑动块
10369 code = "if($event.target.composing)return;" + code;
10370 }
10371 //添加props 属性
10372 addProp(el, 'value', ("(" + value + ")"));
10373 //添加绑定事件
10374 addHandler(
10375 el, //虚拟dom
10376 event, //事件类型

Callers 1

modelFunction · 0.85

Calls 3

genAssignmentCodeFunction · 0.85
addPropFunction · 0.85
addHandlerFunction · 0.85

Tested by

no test coverage detected