标签: ref

如何使用Vue3中的ref访问父组件中的子组件方法?

我正在尝试使用 vue3 和 ref 方法访问父组件中的子方法。但它返回一个错误。

未捕获的类型错误:addNewPaper.value?.savePaper 不是函数

下面是我的代码。请指导我哪里错了。

子组件

<script setup lang="ts">
import { useWindowScroll } from '@vueuse/core'
import { Notyf } from 'notyf'
import { computed, defineProps, reactive, ref } from 'vue'
import { papers } from '/@src/firebase/connections'

const companySize = ref('')
const businessType = ref('')
const productToDemo = ref('')
const date = ref(new Date())

const { y } = useWindowScroll()

const isStuck = computed(() => {
  return y.value > 30
})

const initialState = reactive({
  subject: '',
  paper: …
Run Code Online (Sandbox Code Playgroud)

javascript ref typescript vue.js vuejs3

3
推荐指数
1
解决办法
6394
查看次数

如何使用 Vue 将 ref 传递给子输入组件?

我目前正在尝试传递一个引用来获取提交时的输入(基本输入组件)的值。您将在下面找到这两个组件。对于handleSubmit 中的console.log,电子邮件始终是未定义的。

在此先感谢您的帮助。

父组件

<template>
  <form @submit.prevent="handleSubmit">
    <div class="flex flex-col mt-10">
      <form-label forInput="email" label="Email Address" />
      <base-input type="email" name="email" ref="email" />
    </div>
  </form>
</template>

<script>

import BaseInput from "../UI/BaseInput.vue";
export default {
  components: {
    BaseInput,
  },
  methods: {
    handleSubmit() {
      const email = this.$refs.email.value;
      console.log(email);
    },
  },
};
</script>

Run Code Online (Sandbox Code Playgroud)

子输入组件

<template>
  <input
    :type="type"
    :name="name"
    :ref="name"
  />
</template>

<script>
export default {
  props: ["type", "name"],
};
</script>
Run Code Online (Sandbox Code Playgroud)

javascript ref vue.js

3
推荐指数
1
解决办法
3880
查看次数

在foreach循环中编辑列表

我有一个具有以下结构的对象:(伪代码)

class Client
{
- int ID
- int? ParentID
- string Name
- datetime CreateDate
- int ACClientID
- List <Client> Clients }
Run Code Online (Sandbox Code Playgroud)

我想使用递归foreach遍历整个嵌套结构,将ALL的ACClientID设置为一个值.

我知道foreach中的枚举器是不可变的,因此以下不起作用:

 private static bool AssignToChildren(ref ATBusiness.Objects.Client client, int ACClientID)
        {
            client.ACClientID = ACClientID;

            foreach (ATBusiness.Objects.Client child in client.Clients)
            {
                AssignToChildren(ref child, ACClientID);
            }
        }
Run Code Online (Sandbox Code Playgroud)

实现目标的最有效方法是什么?

PS:我不会在结构中添加或删除,只是为每个嵌套的Client对象设置一个属性.

[编辑]我看过在'foreach'循环中修改列表的最佳方法是什么?但它没有为我提供我需要的答案.

c# foreach ref

2
推荐指数
1
解决办法
1030
查看次数

如何在c#中使用ref属性

我用WPF编写我的界面.我使用ListView作为我的任务列表.任务列表包含两列,FileName,Progress.every绑定到TaskInfo的行:

public class TaskInfo : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public TaskInfo(string fp)
    {
        FileSystemInfo fsi= new DirectoryInfo(fp);
        FileName = fsi.Name;   
        FilePath = fp;     
        PbValue = 0;

    }
    private int pbvalue;
    public int PbValue
    {
        get { return pbvalue; }
        set
        {
            pbvalue = value;
            onPropertyChanged("PbValue");
        }
    }
    private string filename;
    public string FileName
    {
        get { return filename;}
        set
        {
            filename = value;
            onPropertyChanged("FileName");
        }
    }
    private string filepath;
    public string FilePath
    {
        get { return filepath;}
        set …
Run Code Online (Sandbox Code Playgroud)

c# properties ref

2
推荐指数
1
解决办法
860
查看次数

'ref'关键字的内部工作,两个对象指向同一个地址

查看下面的代码并告诉我为什么在调用函数UpdateContext之后,变量connection2没有与变量connection1相同的哈希码.

当我将变量connection2设置为connection1时,两个变量都有一个指向相同内存地址的指针.但是在函数UpdateContext中通过ref传递变量connection1后,使用'new'指令修改指针,connection1有一个新的指针地址,但connection2仍然是旧地址.

   class Program
   {
      static void Main(string[] args)
      {
         var connectionInitializer = new ConnectionInitializer();

         connectionInitializer.Initialize();

         Console.ReadLine();
      }
   }

   public class Connection
   {

   }

   public class ConnectionInitializer
   {
      public void Initialize()
      {
         var connection1 = new Connection();
         var connection2 = connection1;

         Console.WriteLine("Connection 1 (Before ref): " + connection1.GetHashCode());
         Console.WriteLine("Connection 2 (Before ref): " + connection2.GetHashCode());

         this.UpdateContext(ref connection1);

         Console.WriteLine("Connection 1 (After ref): " + connection1.GetHashCode());
         Console.WriteLine("Connection 2 (After ref): " + connection2.GetHashCode());
      }

      private void UpdateContext(ref Connection connection)
      {
         connection = …
Run Code Online (Sandbox Code Playgroud)

c# ref

2
推荐指数
1
解决办法
162
查看次数

我可以通过引用传递对象

我试图将一个xna游戏中的对象传递给我正在编写的xna游戏库中的方法.该对象基本上可以是任何类型,包括引用和值类型.

游戏库用于调试目的,应该向屏幕打印传入的对象的当前值.它目前通过调用ToString对象来执行此操作,但将来字符串将根据基础类型进行格式化.

这是接收参数的游戏库方法

    public void AddToDebug(object obj)
    {
        var type = obj.GetType();
        _debugTypes.Add(obj, type);
    }
Run Code Online (Sandbox Code Playgroud)

以下是在主游戏项目中使用它的示例

VD.AddToDebug(_counter);
VD.AddToDebug(_message);
Run Code Online (Sandbox Code Playgroud)

_counter是一个int并且_message是一个字符串.

问题是这些值的变化不会反映在屏幕上,因为(我假设)它们是按值传递的,而不是通过引用传递的.

我尝试添加ref关键字以确保它们通过引用传递,但这会导致方法调用出错 The ref argument type does not match parameter type

有没有办法可以通过引用传递值类型而不必指定实际类型(如果我可以避免它,我不想为所有值类型创建方法重载).

任何其他建议也欢迎.谢谢

UPDATE

尝试几种不同的方法后,我最终决定采用传递一个简单的方法Func<T>进入AddToDebug方法如下所示.我意识到,至少在目前,我不需要基础值,只需要格式化字符串表示.

将来我可以扩展库以自动扫描传入的类型并显示其所有成员的值.如果是这样的话,我可能会使用@Hans Passant的建议来传递对相关课程的引用.

这就是说我会接受@Lee的答案,因为它在我的最终实现中最有用,建议使用Func.

这是我现在的代码,欢迎任何改进建议.感谢大家的帮助.

    public void AddToDebug<T>(Func<T> getValue, Color? color = null)
    {
        var w = new DebugEntry<T>(getValue, color.HasValue ? color.Value : Color.White);
        _values.Add(w);
    }

    public class DebugEntry<T> : IStringFormatter
    {
        private readonly Func<T> _getValue; …
Run Code Online (Sandbox Code Playgroud)

c# reflection ref

2
推荐指数
1
解决办法
468
查看次数

在循环中启动线程将数组元素传递给每个元素

我在一个循环中启动4个线程.每个线程获取一个数组元素的引用来写入结果.

但是在我创建每个线程的行上,我得到了一个System.IndexOutOfRangeException.我很惊讶索引"i"超出了范围.

这是一个例子:

void ThreadsStarter()
{
    double[] data = new double[4];

    for(int i = 0; i < 4; i++)
    {
        Thread my_thread = new Thread(() => Work(data[i]));
        my_thread.Start();
    }
}

void Work(double data)
{
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c# arrays multithreading ref indexoutofboundsexception

2
推荐指数
1
解决办法
1419
查看次数

C#:构造函数中的奇怪引用表现得像"虚拟字段"

背景是在NHibernate映射中,因为集合字段在基类中声明并在运行时动态代理.

由于有一些代理类需要在编码期间引用集合字段,因此,当NHiberate使用自己的集合实例重新分配字段时,代理会丢失引用.

尝试使用ref"跟踪"参考,但未通过结果.

有些专家可以帮助解释C#ref关键字和NHiberate集合代理(如果有的话)的根本原因.

谢谢.

class Program
{
    static void Main(string[] args)
    {
        var v = new D();
    }
}

class A
{
}

class B : A
{
}

class C
{
    public A a = new A();
    public Proxy p;

    public C()
    {
        p = new Proxy(ref a);
        p.Out();
    }
}

class D : C
{
    public D()
    {
        a = new B();
        Console.WriteLine(a.GetType().Name);
        p.Out();
    }
}


class Proxy
{
    public A a;

    public Proxy(ref A …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate constructor ref

2
推荐指数
1
解决办法
121
查看次数

是否有可能通过ref传递属性的变通方法?再加上参考发生率

是否可以通过Ref传递参考类型(Class)的自动属性的变通方法?

我唯一想到的就是不要使用自动属性:只需要像往常一样声明私有变量并通过ref传递它,如果需要的话,将公共属性添加到一边.
坦率地说,它看起来有点愚蠢(所有官僚机构都需要绕过它)

我的问题:1.
为什么编译器不允许自动属性被ref传递(就像它是一个简单的数据成员)?2.什么时候使用或应该使用Ref?我注意到有人说使用它可能只在极少数情况下才会发生.他们是什么?

c# reference ref pass-by-reference

2
推荐指数
1
解决办法
1060
查看次数

可变参考单元不适用于静态成员

我想我明白这里发生了什么,但我真的很感激有人说明为什么会发生这种情况.

基本上,(我的编码在飞行这里,给尽可能简单的图示)我有一个S类,除其他事项外,保持与名字的类的对象符号表.所以,我在课堂上定义:

static member (names:Map<string,S> ref) = ref Map.empty
Run Code Online (Sandbox Code Playgroud)

......然后,在S中,我定义:

member this.addSymbol (table: Map<string,S> ref) (name:string)
    table := (!table).Add(name, this)
    this
Run Code Online (Sandbox Code Playgroud)

我从其他地方称呼这个,因此:

ignore (s.addSymbol S.names "newname")
...
Run Code Online (Sandbox Code Playgroud)

在S.addSymbol里面,我可以看到新的键/值被添加到表中,但是S.names没有得到更新.相反,如果我这样调用addSymbol:

ignore (
    let tmp = S.names
    s.addSymbol tmp "newName"
)
Run Code Online (Sandbox Code Playgroud)

然后我可以看到tmp正在使用新的键/值对进行更新,但是S.names仍然没有得到更新.

这就是我认为我所知道的:ref机制没有任何问题 - 它在函数内部和外部正确地更新了指示对象.但是静态成员似乎有些奇怪 - 就像,每次都只是递给我相同的静态引用',它复制'a然后为此创建一个新的引用.

我做对了吗?如果是这样,为什么要这样做呢?我能做些什么来让它表现得更明智?

提前致谢.

f# ref

2
推荐指数
1
解决办法
111
查看次数