带参数的AngularJS方法调用

带参数的AngularJS方法调用,angularjs,method-invocation,Angularjs,Method Invocation,我正在研究别人的代码,但我还没有完全理解它。此外,我对AngularJS还是个新手 他们有这样一个类: return vm.item[vm.function](request).$promise.then(function (data) { ... }); 当我的vm.function没有参数时,它可以完美地工作。我就是喜欢 vm.function = "myFunction" myFunction将按预期调用 但是,现在我需要调用一个具有id参数的函数。我已经试过了 vm.func

我正在研究别人的代码,但我还没有完全理解它。此外,我对AngularJS还是个新手

他们有这样一个类:

return vm.item[vm.function](request).$promise.then(function (data) {
    ...
});
当我的vm.function没有参数时,它可以完美地工作。我就是喜欢

vm.function = "myFunction"
myFunction将按预期调用

但是,现在我需要调用一个具有id参数的函数。我已经试过了

vm.function = "myFunction(0)"
vm.function = "myfunction({id:0})"
甚至在请求变量中添加一个id元素,但到目前为止还没有结果

我怎样才能做到这一点呢?

vm.function只是函数的名称,它没有提到任何参数。我们来分析一下这里发生的事情

vm.function = 'myFunction';

vm.item[vm.function](request)
转化为

vm.item['myFunction'](request)
这相当于

vm.item.myFunction(request)
如您所见,它已经在传递一个请求参数。要添加另一个,只需执行以下操作:

vm.item[vm.function](request, id)
使用此模式时请记住,动态函数签名必须兼容。如果它们开始像你说的那样出现分歧,那么你正在编辑其他人的代码,你应该重构,以不同的方式处理这些代码。

vm.function只是函数的名称,它没有提到任何参数。我们来分析一下这里发生的事情

vm.function = 'myFunction';

vm.item[vm.function](request)
转化为

vm.item['myFunction'](request)
这相当于

vm.item.myFunction(request)
如您所见,它已经在传递一个请求参数。要添加另一个,只需执行以下操作:

vm.item[vm.function](request, id)

使用此模式时请记住,动态函数签名必须兼容。如果他们开始像你说的那样出现分歧,你正在编辑其他人的代码,你应该重构,以不同的方式处理这些问题。

你好,大卫,请允许我问你一些关于这个问题的问题。。。我认为vm是一个控制器,函数是它的属性之一。函数是指令的参数绑定到控制器吗?是函数类型&?从何处调用该函数?。我经常使用angular,从不需要处理类似于vm.item[vm.function]请求的事情。$promise.thenfunction data.:SHi Victor,我只是想修复代码中的一个小问题,所以不值得仅仅为此更改整个代码结构。这不是我的代码,我不知道很多AngularJS,所以我不能告诉你这是不是结构良好。此行用于标准化在应用程序中获取列表数据的方式。从任何需要以列表形式从api获取数据的地方,都可以使用这个类,它调用指定的函数。项通常是一个服务,函数是您想要调用的服务方法,请允许我澄清,我不会说我知道很多,我说我经常使用它,。。。因此,您使用映射根据要获取的数据类型调用函数是可以的,我看到,最终,您遇到了参数的问题—并非所有的获取例程都具有与我相同的参数—尽管我有错误,但后来仍对其进行了更改—添加了默认为空的结构参数,这样我就不必更改任何其他不使用参数的类,然后在调用时将其与请求结构合并。这样,我可以在我的另一个类中使用vm.params={id:16},现在它可以工作了!嗨,大卫,请允许我问你一些关于这个问题的事情。。。我认为vm是一个控制器,函数是它的属性之一。函数是指令的参数绑定到控制器吗?是函数类型&?从何处调用该函数?。我经常使用angular,从不需要处理类似于vm.item[vm.function]请求的事情。$promise.thenfunction data.:SHi Victor,我只是想修复代码中的一个小问题,所以不值得仅仅为此更改整个代码结构。这不是我的代码,我不知道很多AngularJS,所以我不能告诉你这是不是结构良好。此行用于标准化在应用程序中获取列表数据的方式。从任何需要以列表形式从api获取数据的地方,都可以使用这个类,它调用指定的函数。项通常是一个服务,函数是您想要调用的服务方法,请允许我澄清,我不会说我知道很多,我说我经常使用它,。。。因此,您使用映射根据要获取的数据类型调用函数是可以的,我看到,最终,您遇到了参数的问题—并非所有的获取例程都具有与我相同的参数—尽管我有错误,但后来仍对其进行了更改—添加了默认为空的结构参数,这样我就不必更改任何其他不使用参数的类,然后在调用时将其与请求结构合并。这样,我可以在我的另一个类中使用vm.params={id:16},现在它可以工作了!