У меня есть компонент Vue, в котором есть компонент "vue-webcam" внутри, моя проблема заключается в том, как я могу получить доступ к "потоку" внутри его данных и запретить использовать мой метод вне этого компонента "vue-webcam". В любом случае, я должен сделать состояние
<script>
export default{
components:{
'vue-webcam':{
render:function(h){
return h('video',{
...
})
}
props:{
...
},
data:{
return{
video: '',
stream: '', // I need to get this using my btn_stop
hasUserMedia: ''
}
}
}
},
data:()=>({
///...
}),
methods:{
btn_stop(){
let tracks = this.stream.getTracks()[0] // How do I access the "stream" data above on my vue-webcam component
tracks.stop()
}
}
}
</script>
Компонентные методы доступны публично. Вы можете установить свойство ref
для своего компонента и методы вызова на нем. Например, добавьте метод stop
для vue-webcam
...
methods: {
stop () {
this.stream.getTracks()[0].stop()
this.$emit('stopped') // for extra points
}
}
затем в шаблоне родительского компонента
<vue-webcam ref="webcam" @stopped="someOptionalEventHandler" .../>
и в методе btn_stop
...
methods: {
btn_stop () {
this.$refs.webcam.stop()
}
}
Пока вы здесь, data
компонента Vue всегда должны быть функцией и предпочтительно не функцией стрелки (особенно, если вам нужно обратиться к свойствам экземпляра компонента). Поэтому оба ваших свойства data
должны быть
data () {
return {
// data properties
}
}
или же
data: function() {
return {
// data properties
}
}
isPlaying: true
в данных вашего родительского компонента, передайте егоvue-webcam
в качестве реквизита. вbtn_stop()
установите дляisPlaying
значение false, и теперь вашаvue-webcam
может обрабатывать треки, наблюдая заisPlaying