laravel - Vuejs - 单击组件中的按钮时未触发事件
问题描述
我有下一个组件,它位于模态标记内。单击时,模式将打开,其中包含从所述 url 获取的内容。
<modal>
<laravel-view :url="'{{ '/post/view/' . $comment->source_id }}'"></laravel-view>
</modal>
它在这里定义:
Vue.component('laravel-view',{
template: '#laravel-view.vue-template',
data(){
return {
viewHtml: null
}
},
props: [
'url'
],
mounted() {
this.loadPost(this.url)
},
methods: {
loadPost(viewUrl){
var self = this;
$.get( viewUrl, function( htmlString ) {
var compiled = Vue.compile('<div>' + htmlString + '</div>');
self.viewHtml = htmlString;
});
}
}
});
和模板,来自刀片文件:
<script type="text/x-template" id="laravel-view" class="vue-template">
<div class="view-wrapper" v-html=viewHtml>
</div>
</script>
当您单击 laravel-view 组件时,模式会打开(这是另一个组件),显示的内容将是它从链接中获取的内容。这是从控制器返回的视图,其中包含从上面获取的信息:
<div>
<div class="post" style="text-align: center;">
<img src="{{ $post->image }}" style="margin: auto;" />
<p>
<h1 >{{ $post->title }}</h1>
{{ $post->caption }}
</p>
</div>
<div class="post-comments">
<div class="post-content">
@foreach( $post->comments as $comment )
<div class="comment activity-box-w" id="{{$comment->post_id}}">
<div class="activity-box" style="align-items: normal">
<div style="margin-top: 5px">
<div class="activity-avatar" style="background-image: url({{ asset($comment->image) }}); float: left;">
</div>
</div>
<div class="activity-info">
<div class="activity-role">
{{ '@' . $comment->username }}
</div>
<div class="ellipsis">
<div>
<p class="activity-title">{{ $comment->comment }}</p>
</div>
</div>
</div>
<div class="time">
{{ \Carbon\Carbon::parse($comment->created_at)->toDateTimeString() }}
</div>
</div>
</div>
@endforeach
</div>
<div class="post-pub" style="width: 100%;padding-top: 10px; margin-left: 25%;">
<form style="width: 100%:">
<textarea rows="1"></textarea>
<button type="button" class="btn-primary btn-s" v-on:click="commentPost">Send</button>
</form>
</div>
</div>
</div>
我已经在两个.js 文件上定义了该方法(不是我都需要它;只是知道它在世界上的哪个位置被触发,假设它确实触发了)并且该事件永远不会触发。我通过将其类型更改为“提交”并单击它(重新加载页面)来确保该按钮正常工作。尽管如此,问题仍然存在。我怎样才能使这项工作?
解决方案
对于任何有兴趣的人,并希望这对遇到同样问题的人有用,会发生什么:
据我所知,组件在从源获取数据时正在重新渲染;然而,它没有再次包含脚本!,这就是按钮根本没有响应的原因。来解决这个问题。我必须将它包含在第一个刀片文件中,如下所示:
<laravel-view :url="'{{ '/post/view/' . $comment->source_id }}'"></laravel-view>
<div class="post-pub" style="width: 100%;padding-top: 10px;">
<form style="width: 100%:">
<textarea rows="1" v-model="postComment" id="postCommentTextArea"></textarea>
<button type="button" class="btn-primary btn-s" @click="comment({{ $comment->id }})">Send</button>
</form>
</div>
推荐阅读
- android - QuickBlox - 尝试调用虚拟方法 addDialogMessageListener
- sql - 根据是否存在另一个表行来选择行
- r - 如何将 shapefile 与具有纬度/经度数据的数据框合并
- matlab - 每个网格点的矩阵
- configuration - OpenAM IdP 中的多值属性
- node.js - 如何使用 node.js 获取页面上使用的所有字体?
- wordpress - Git 合并导致 400 次重命名/重命名冲突,如何快速解决它们?
- angular5 - 如何推送属于formArray的formGroup的值
- git - Git GUI 合并解析
- object-storage - 如何在 unix shell 中计算 md5-content 标头?