Просмотр исходного кода

fix resolveAsset for transcluded components in strict mode (fix #1191)

Evan You 10 лет назад
Родитель
Сommit
8ef18562ac
2 измененных файлов с 26 добавлено и 2 удалено
  1. 3 2
      src/util/options.js
  2. 23 0
      test/unit/specs/misc_spec.js

+ 3 - 2
src/util/options.js

@@ -345,10 +345,11 @@ exports.resolveAsset = function resolve (options, type, id) {
   var assets = options[type]
   var asset = assets[id] || assets[camelizedId] || assets[pascalizedId]
   while (
-    !asset && options._parent &&
+    !asset &&
+    options._parent &&
     (!config.strict || options._repeat)
   ) {
-    options = options._parent.$options
+    options = (options._context || options._parent).$options
     assets = options[type]
     asset = assets[id] || assets[camelizedId] || assets[pascalizedId]
   }

+ 23 - 0
test/unit/specs/misc_spec.js

@@ -309,4 +309,27 @@ describe('Misc', function () {
     })
   })
 
+  it('resolveAsset for repeat instance inside content in strict mode', function () {
+    Vue.config.strict = true
+    var el = document.createElement('div')
+    el.innerHTML =
+      '<outer>' +
+        '<template v-repeat="item in items">' +
+          '<inner>{{item}}</inner>' +
+        '</template>' +
+      '</outer>'
+    new Vue({
+      el: el,
+      data: {
+        items: [1, 2, 3]
+      },
+      components: {
+        outer: { template: '<content></content>' },
+        inner: { template: '<content></content>' }
+      }
+    })
+    expect(el.textContent).toBe('123')
+    Vue.config.strict = false
+  })
+
 })