Vue: рдкреНрд░реЛрдк рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП `:srcObject.prop` рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рджрд┐рд╕ре░ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vuejs/vue

рд╕рдВрд╕реНрдХрд░рдг

2.5.17

рдкреНрд░рдЬрдирди рд▓рд┐рдВрдХ

https://codesandbox.io/s/ppyq71wrxj

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

(рдиреНрдпреВрдирддрдо рд░реЗрдкреНрд░реЛ рджреЗрдЦреЗрдВ)

  1. HTMLMediaElement рд╕рд╛рде рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ :srcObject.prop рдХреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗ рдмрд╛рдВрдзрддрд╛ рд╣реИ (рдЬреЛ null рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ):
<audio :srcObject.prop="stream">
  1. рдЗрд╕реЗ рдХреБрдЫ рдорд╛рдиреНрдп MediaStream :
this.stream = new MediaStream();
  1. рдЗрд╕реЗ рд╡рд╛рдкрд╕ null :
this.stream = null;

рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ?

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ audio.srcObject рдЕрд╢рдХреНрдд рд╣реЛрдЧрд╛

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ MediaStream рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рд▓реЙрдЧ рдореЗрдВ TypeError рд╣реИред


рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдкреНрд░реЛ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛: https://jsfiddle.net/4tnkapxo/1/ (рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдкреВрд░реА рдмрд╛рдд рдЗрдирд▓рд╛рдЗрди рд╣реИ?)

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдЗрд╕ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, updateDOMProps рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛:

  for (key in oldProps) {
    if (isUndef(props[key])) {
      elm[key] = '';
    }
  }

isUndef(null) рд╕рддреНрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреНрд░реЛрдк рдХреЛ '' рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди srcObject рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕реЗ null рдпрд╛ MediaStream

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╢рд╛рдпрдж рд╣рдореЗрдВ .prop рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╢рд╛рдпрдж рд╣рдореЗрдВ .prop рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрдм рдЬрдм рдореИрдВрдиреЗ рдкреНрд░рд╢реНрди рдореЗрдВ рдХреЛрдб ( updateDOMProps src/platforms/web/runtime/modules/dom-props.js) рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ (рдЗрдХрд╛рдИ/рдореЙрдбреНрдпреВрд▓/vdom/рдореЙрдбреНрдпреВрд▓/dom-props.spec.js рдореЗрдВ) рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд▓реЛрдкрди рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реБрд░рдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ:

  it('should remove the elements domProps', () => {
    const vnode1 = new VNode('a', { domProps: { src: 'http://localhost/' }})
    const vnode2 = new VNode('a', { domProps: {}})
    patch(null, vnode1)
    const elm = patch(vnode1, vnode2)
    expect(elm.src).toBe('')
  })

... HTMLEmelent рд╕рдВрдкрддреНрддрд┐ рдХреЛ "рдбрд┐рд▓реАрдЯ" рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рднреА рдордирдорд╛рдирд╛ рдореВрд▓реНрдп рд╕реЗрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдЕрд░реНрде рдореЗрдВ, рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ elm[key] = ''; рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдорд╛рдирдХ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рдХрдЯрддрдо рд╣реИред <img> рдЯреИрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, .src рдкреНрд░реЛрдк рдХреЛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛:

09:48:05.267 const img = document.createElement('img')
09:48:08.948 img.src
09:48:08.953 ""
09:48:14.469 img.src = null
09:48:17.213 img.src
09:48:17.222 "https://localhost:8080/null"

(рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред)

рддреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рд╕реА рднреА рдЕрд╢рдХреНрдд / рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЪрд┐рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреА рддрд░рд╣ рд▓рдЧрддреА рд╣реИред рдореИрдВрдиреЗ isUndef(props[key]) рдЪреЗрдХ рдХреЛ props.hasOwnProperty(key) рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реАрдзреЗ undefined рд╕реЗ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рднреА рдХреА рд╣реИ ... рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдкреНрд░реЙрдк рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдЙрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ; рдпрд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдФрд░ dom-props.js рдореЗрдВ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рд╕рдВрдкрддреНрддрд┐/рддрддреНрд╡ рд╕рдВрдпреЛрдЬрди рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднрдпрд╛рдирдХ рд▓рдЧрддрд╛ рд╣реИред

рдЙрд╕рдиреЗ рдХрд╣рд╛, рдХреНрдпрд╛ рдореИрдВ рд╡рд╣рд╛рдБ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзрд╛рд░рдгрд╛рдПрдБ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ? рдХреНрдпрд╛ рд╡рд╣ рдХреЛрдб рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдирдП vnode рдореЗрдВ рд▓рд╛рдкрддрд╛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдЧрд╛рд░реНрдб рд╣реИ? рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓реЗрдЦрдХ рдХреЗрд╡рд▓ src рд╕рдВрдкрддреНрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛? рдХреНрдпрд╛ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдкреНрд░реЙрдк рдХреЛ "рдбрд┐рд▓реАрдЯ" рдХрд░рддреЗ рд╕рдордп "" , null рдФрд░ undefined рдмреАрдЪ рд╕реЗ рд╕рд╣реА рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ?

рджреВрд╕рд░реА рдУрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдмрд╛рдзреНрдп рдЧреБрдгреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ рддреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ ... рдЬреИрд╕реЗ <audio :srcObject.prop="stream"> рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ stream рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреБрдЫ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ vnode рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдореЗрд░реА рд╕рдордЭ рд╕реЗ рдкрд░реЗ рд╣реИ рдЬреЛ {stream: {some: thing}} рдХреЛ {} рд╕реЗ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдЭрд╛рд╡ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ hasOwnProperty рд╡рд╣рд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрд╛рдВрдЪ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо elm[key] = '' рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдЙрддрдирд╛ рд╣реА рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд┐рддрдирд╛ рдХреЛрдИ "рдорд╛рдирдХ" рд╣рдЯрд╛рдПрдВред , рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рдорд▓рд╛); рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦреВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ f11449d916a468651d4fd5024c37e3eebbc9941f рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

hiendv picture hiendv  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

julianxhokaxhiu picture julianxhokaxhiu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

paceband picture paceband  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wufeng87 picture wufeng87  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

guan6 picture guan6  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ