Skip to content

Commit fe652db

Browse files
committed
feat(build & core): class 和 style 属性支持使用过滤器
1 parent 8bfd67b commit fe652db

File tree

2 files changed

+35
-29
lines changed

2 files changed

+35
-29
lines changed

packages/mars-build/src/compiler/template/mark-component.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,13 @@ function isComplexExp(exp) {
8787
}
8888

8989
function getFilters(node) {
90-
let props = node.attrsList
91-
? node.attrsList.filter(({name, value}) =>
92-
name.indexOf(':') >= 0 && (/[^|]+\|[^|]+/.test(value) || isComplexExp(value))
93-
)
90+
let props = node.attrsMap
91+
? Object.keys(node.attrsMap).filter(name => {
92+
const value = node.attrsMap[name];
93+
return name.indexOf(':') >= 0 && (/[^|]+\|[^|]+/.test(value) || isComplexExp(value));
94+
})
9495
: [];
95-
props = props.map(({name}) => name.replace(/^(v-bind)?:/, ''));
96+
props = props.map(name => name.replace(/^(v-bind)?:/, ''));
9697

9798
let texts = node.children
9899
? node.children.map(c => {

packages/mars-core/src/base/data.js

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -113,32 +113,30 @@ function compareAndSetData(k, val, old, key, data) {
113113
}
114114
}
115115

116-
function getFiltersData(vm, $mp, data = {}) {
117-
/*
118-
optimised filter data
119-
init:
120-
{
121-
_f_: {
122-
0: {
123-
_if: true,
124-
_t: ['Hello'],
125-
_p: {
126-
test: 'text'
127-
}
116+
/*
117+
optimised filter data
118+
init:
119+
{
120+
_f_: {
121+
0: {
122+
_t: ['Hello'],
123+
_p: {
124+
text: 'Olleh'
128125
}
129126
}
130127
}
131-
update:
132-
{
133-
'_f_.0._if': false,
134-
'_f_.0._t.0: 'Olleh',
135-
'_f_.0._p.test: 'test',
136-
'_f_.1': {
137-
_t: [],
138-
_p: {}
139-
}
140-
} */
141-
128+
}
129+
update:
130+
{
131+
'_f_.0._t.0: 'Olleh',
132+
'_f_.0._p.text: 'Hello',
133+
'_f_.1': {
134+
_t: [],
135+
_p: {}
136+
}
137+
}
138+
*/
139+
function getFiltersData(vm, $mp, data = {}) {
142140
if (vm._fData) {
143141
const originFData = $mp.data._f_;
144142
if (!originFData) {
@@ -154,7 +152,9 @@ function getFiltersData(vm, $mp, data = {}) {
154152
const {t: texts, p: props, for: _for} = vnodeFData;
155153
const _if = !!vnodeFData.if;
156154
let propsData = {};
155+
let styleData = {};
157156
if (vnode && props) {
157+
styleData = vnode.data;
158158
propsData = vnode.componentOptions
159159
? vnode.componentOptions.propsData
160160
: (vnode.data && vnode.data.attrs);
@@ -170,7 +170,12 @@ function getFiltersData(vm, $mp, data = {}) {
170170
if (props) {
171171
kData._p = kData._p || {};
172172
props.forEach(key => {
173-
kData._p[key] = propsData[key];
173+
if (key === 'class' || key === 'style') {
174+
kData._p[key] = styleData[key];
175+
}
176+
else {
177+
kData._p[key] = propsData[key];
178+
}
174179
});
175180
}
176181
if (texts) {

0 commit comments

Comments
 (0)