* Cross-platform code generation for component v-model * 组件v-model的跨平台代码生成 更新$$v 数据 * 为虚拟dom添加model属性,
(
el, //虚拟dom
value, //绑定v-model 的值
modifiers
)
| 9870 | * 为虚拟dom添加model属性, |
| 9871 | */ |
| 9872 | function genComponentModel( |
| 9873 | el, //虚拟dom |
| 9874 | value, //绑定v-model 的值 |
| 9875 | modifiers |
| 9876 | ) { |
| 9877 | var ref = modifiers || {}; |
| 9878 | var number = ref.number; //数字 |
| 9879 | var trim = ref.trim; //去除字符串 |
| 9880 | // 给baseValueExpression赋值一个默认的字符串 |
| 9881 | var baseValueExpression = '$$v'; |
| 9882 | var valueExpression = baseValueExpression; |
| 9883 | if (trim) { |
| 9884 | // 判断类型是否为字符串,如果是使用去空格方法,如果不是返回原值 |
| 9885 | valueExpression = |
| 9886 | "(typeof " + baseValueExpression + " === 'string'" + |
| 9887 | "? " + baseValueExpression + ".trim()" + |
| 9888 | ": " + baseValueExpression + ")"; |
| 9889 | } |
| 9890 | if (number) { //如果是数字 则用数字渲染方法 |
| 9891 | valueExpression = "_n(" + valueExpression + ")"; |
| 9892 | } |
| 9893 | |
| 9894 | /* |
| 9895 | *创赋值代码,转义字符串对象拆分字符串对象 把后一位key分离出来 |
| 9896 | * 返回 key"=" value |
| 9897 | * 或者 $set(object[info],key,valueExpression) |
| 9898 | */ |
| 9899 | var assignment = genAssignmentCode( |
| 9900 | value, //绑定v-model 的属性值 |
| 9901 | valueExpression //值 |
| 9902 | ); |
| 9903 | console.log(value) |
| 9904 | console.log(valueExpression) |
| 9905 | console.log(baseValueExpression) |
| 9906 | console.log(assignment) |
| 9907 | |
| 9908 | |
| 9909 | //如果 trim不存在,number 不存在 则 valueExpression 默认为$$v |
| 9910 | //回调函数是 $set(object[info],key,$$v) 更新$$v的值 |
| 9911 | el.model = { |
| 9912 | value: ("(" + value + ")"), // 绑定v-model 的值 |
| 9913 | expression: ("\"" + value + "\""), //绑定v-model 的值 |
| 9914 | //函数 $set(object[info],key,$$v) //$set更新值函数 |
| 9915 | callback: ("function (" + baseValueExpression + ") {" + assignment + "}") |
| 9916 | }; |
| 9917 | |
| 9918 | |
| 9919 | } |
| 9920 | |
| 9921 | /** |
| 9922 | * Cross-platform codegen helper for generating v-model value assignment code. |
no test coverage detected