Parcourir la source

support postTransform as well

Evan You il y a 10 ans
Parent
commit
3edfc4518d
2 fichiers modifiés avec 16 ajouts et 4 suppressions
  1. 6 0
      src/compiler/parser/index.js
  2. 10 4
      test/unit/modules/compiler/parser.spec.js

+ 6 - 0
src/compiler/parser/index.js

@@ -33,6 +33,7 @@ let platformGetTagNamespace
 let platformMustUseProp
 let preTransforms
 let transforms
+let postTransforms
 let delimiters
 
 /**
@@ -47,6 +48,7 @@ export function parse (
   platformMustUseProp = options.mustUseProp || no
   preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')
   transforms = pluckModuleFunction(options.modules, 'transformNode')
+  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode')
   delimiters = options.delimiters
   const stack = []
   let root
@@ -165,6 +167,10 @@ export function parse (
         currentParent = element
         stack.push(element)
       }
+      // apply post-transforms
+      for (let i = 0; i < postTransforms.length; i++) {
+        postTransforms[i](element, options)
+      }
     },
 
     end () {

+ 10 - 4
test/unit/modules/compiler/parser.spec.js

@@ -316,15 +316,21 @@ describe('parser', () => {
     expect(ast.props).toBeUndefined()
   })
 
-  it('preTransforms', () => {
+  it('pre/post transforms', () => {
     const options = extend({}, baseOptions)
-    const spy = jasmine.createSpy('preTransform')
+    const spy1 = jasmine.createSpy('preTransform')
+    const spy2 = jasmine.createSpy('postTransform')
     options.modules = options.modules.concat([{
       preTransformNode (el) {
-        spy(el.tag)
+        spy1(el.tag)
+      },
+      postTransformNode (el) {
+        expect(el.staticAttrs.length).toBe(1)
+        spy2(el.tag)
       }
     }])
     parse('<img v-pre src="hi">', options)
-    expect(spy).toHaveBeenCalledWith('img')
+    expect(spy1).toHaveBeenCalledWith('img')
+    expect(spy2).toHaveBeenCalledWith('img')
   })
 })