Vue.js路由未处理任何方法
Vue.js routing no method handled
我在Vue.js和他的路由系统上遇到了一些问题。我在这里举了一个例子。
为什么当我使用模板(请参阅Foo)时该方法正确附加,而当我使用el(请参阅Bar)时为什么不正确附加?
这是他的代码:
index.js
var Foo = Vue.extend({
template: '<p v-on:click.prevent="foo">This is foo!</p>',
methods: {
foo: function(){
alert('YEAH')
}
}
})
var Bar = Vue.extend({
el: function(){
return '#bar'
},
methods: {
bar: function(){
alert('YEAH')
}
}
})
var App = Vue.extend({})
var router = new VueRouter()
router.map({
'/foo': {
component: Foo
},
'/bar': {
component: Bar
}
})
router.start(App, '#app')
index.html
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- use v-link directive for navigation. -->
<a v-link="{ path: '/foo' }">Go to Foo</a>
<a v-link="{ path: '/bar' }">Go to Bar</a>
</p>
<div id="bar" v-bind:class="$route.path == '/bar' ? '' : 'hidden'">
<p v-on:click.prevent="bar">This is bar!</p>
</div>
<!-- use router-view element as route outlet -->
<router-view></router-view>
</div>
您误解了el
的目的。当您将el
传递给组件时,它会告诉Vue在哪个元素上安装
注意,所提供的元件仅仅用作安装点;如果还提供了模板,则它将被替换,除非replace设置为false。解析的元素将作为vm访问$el.
实际上,在#bar
中没有Vue可以编译的模板,这就是为什么没有输出的原因。另外,在另一个Vue的el
(在您的案例中为#app
)中使用el
也是个坏主意。v-on:click.prevent="bar"
位是在父级(App
实例)作用域中编译的,由于App
没有bar
方法,因此会收到警告。
更好的解决方案:http://codepen.io/anon/pen/zqWKrg
请注意,现在每个组件都有自己的模板,您可以清楚地看到每个组件的作用域:#app
在App
作用域中编译,#foo
在Foo
作用域中汇编,#bar
在Bar
作用域中编辑。
-
应该使用
template: '#bar'
而不是el: '#bar'
—el
选项不是模板的选择器。var Bar=Vue.extend({模板:"#bar",
methods: { bar: function(){ alert('YEAH') } }
})
-
你(ab)在应用程序主模板中使用了一个常规的HTML元素作为组件的子模板——这不是你应该做的
这也是点击事件不起作用的原因:该div的内容,包括点击事件,是由App组件而不是Bar组件评估的。应用程序组件没有"bar"方法。
因此控制台中出现错误:
[Vue warn]:v-on:click="bar"需要一个函数值,得到了未定义的
模板应该是这样的:
<script type="x-template" id="bar">
<div>
<p v-on:click.prevent="bar">This is bar!</p>
</div>
</script>
<!-- or with HTML5 template tag: -->
<template id="bar">
<div>
<p v-on:click.prevent="bar">This is bar!</p>
</div>
</template>
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 在不重新加载的情况下更改标头URL的任何方法
- 在离子2中,有任何方法可以将涡旋动量作为一个事件来检测
- 有没有任何方法可以将javascript对象从源代码传递到系统/浏览器剪贴板
- 在jquery中是否有任何方法或位置可以编写从Dom中删除页面后调用的方法
- 使用多功能框在 chrome 扩展程序中包含内联自动填充功能的任何方法
- 在 JavaScript 中识别浏览器选项卡的任何方法
- 是从画布获取图像数据的任何方法,从远程视频中提取
- Win7 IE9 youtube播放器js对象没有任何方法
- 是否有任何方法适用于“WebGLRenderingContext”,如“CanvasRenderingContext2D
- 是否有任何方法可以去除“"打印时从阵列中删除
- 是否有任何方法可以像HTML5<p>标签
- Vue.js路由未处理任何方法
- 有没有任何方法可以将json对象存储在HTML标记的默认/自定义属性中,比如<tr>
- 是否有任何方法可以避免使用JSDoc“@方法“;注释
- 有没有任何方法可以从javascript进行跨域请求,并访问它可能生成的错误响应类型(401404等)