Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 苗条、事件调度器或作为值的函数?使用什么?_Javascript_Events_Event Handling_Svelte_Svelte 3 - Fatal编程技术网

Javascript 苗条、事件调度器或作为值的函数?使用什么?

Javascript 苗条、事件调度器或作为值的函数?使用什么?,javascript,events,event-handling,svelte,svelte-3,Javascript,Events,Event Handling,Svelte,Svelte 3,阅读这个令人惊叹的模式示例的代码:如果我使用: createEventDispatcher()带有类似于on:close={()=>doSomething()}或 只需将函数作为值传递,如action={doSomething} 同样在第一种情况下,我不能在插槽上使用on:close={…},对吗 如果我尝试,它会给我以下错误:[!](plugin svelte)ValidationError:不能有指令 您建议使用什么?传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我

阅读这个令人惊叹的模式示例的代码:如果我使用:

  • createEventDispatcher()
    带有类似于
    on:close={()=>doSomething()}
  • 只需将函数作为值传递,如
    action={doSomething}
  • 同样在第一种情况下,我不能在
    插槽上使用
    on:close={…}
    ,对吗

    如果我尝试,它会给我以下错误:
    [!](plugin svelte)ValidationError:不能有指令


    您建议使用什么?

    传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我看来,回调更可取

    但是,您只能传递一个回调,而同一事件上可以有多个侦听器

    <script>
        import { onMount } from 'svelte'
        import Beeper from './Beeper.svelte'
    
        let beeper
    
        onMount(() => {
            const disposes = [
                beeper.$on('beep', () => console.log('dynamic A')),
                beeper.$on('beep', () => console.log('dynamic B'))
            ]
            return () => disposes.forEach(fn => fn())
        })
    </script>
    
    <Beeper on:beep={() => console.log('inline')} bind:this={beeper} />
    
    事件也更容易代理:

    <script>
      import Beeper from './Beeper.svelte'
    
      export let onBeep
    </script>
    
    <Beeper {onBeep} />
    
    Proxy.svelte

    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <Beeper on:beep />
    
    <script>
      import Proxy from './Proxy.svelte'
    </script>
    
    <Proxy on:beep={() => console.log('beep')} />
    
    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <!-- callbacks are all in the $$props bag, but I have to know every
         event that I want to proxy -->
    <Beeper {...$$props} on:beep />
    
    另一方面,事件可能会成为代理的麻烦:

    <script>
      import Beeper from './Beeper.svelte'
    
      export let onBeep
    </script>
    
    <Beeper {onBeep} />
    
    Proxy.svelte

    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <Beeper on:beep />
    
    <script>
      import Proxy from './Proxy.svelte'
    </script>
    
    <Proxy on:beep={() => console.log('beep')} />
    
    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <!-- callbacks are all in the $$props bag, but I have to know every
         event that I want to proxy -->
    <Beeper {...$$props} on:beep />
    

    传递回调是最简单的方法。光。简单。在大多数情况下,回调可以做到这一点,在我看来,回调更可取

    但是,您只能传递一个回调,而同一事件上可以有多个侦听器

    <script>
        import { onMount } from 'svelte'
        import Beeper from './Beeper.svelte'
    
        let beeper
    
        onMount(() => {
            const disposes = [
                beeper.$on('beep', () => console.log('dynamic A')),
                beeper.$on('beep', () => console.log('dynamic B'))
            ]
            return () => disposes.forEach(fn => fn())
        })
    </script>
    
    <Beeper on:beep={() => console.log('inline')} bind:this={beeper} />
    
    事件也更容易代理:

    <script>
      import Beeper from './Beeper.svelte'
    
      export let onBeep
    </script>
    
    <Beeper {onBeep} />
    
    Proxy.svelte

    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <Beeper on:beep />
    
    <script>
      import Proxy from './Proxy.svelte'
    </script>
    
    <Proxy on:beep={() => console.log('beep')} />
    
    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <!-- callbacks are all in the $$props bag, but I have to know every
         event that I want to proxy -->
    <Beeper {...$$props} on:beep />
    
    另一方面,事件可能会成为代理的麻烦:

    <script>
      import Beeper from './Beeper.svelte'
    
      export let onBeep
    </script>
    
    <Beeper {onBeep} />
    
    Proxy.svelte

    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <Beeper on:beep />
    
    <script>
      import Proxy from './Proxy.svelte'
    </script>
    
    <Proxy on:beep={() => console.log('beep')} />
    
    <script>
      import Beeper from './Beeper.svelte'
    </script>
    
    <!-- callbacks are all in the $$props bag, but I have to know every
         event that I want to proxy -->
    <Beeper {...$$props} on:beep />
    

    这回答了你的问题吗?这回答了你的问题吗?