【问题标题】:Pass a dynamically created url from my controller to my factory将动态创建的 url 从我的控制器传递到我的工厂
【发布时间】:2016-06-02 15:47:11
【问题描述】:

我可以将变量从我的控制器传递到我的工厂。我无法做的是在我的控制器中动态设置新 URL 字符串中的值,并让工厂看到这个值而不是原始缓存的值。 Mu 控制器设置SaveDate.setMyData 中的值如下:

//this function saves the date change
vm.myFunction1 = function ($resource) {

   vm.myDate = '/api/Product/SetMilestoneDate/vm.officeKey/vm.whichMilestone/vm.yearSelected/vm.monthSelected/vm.daySelected';

   SaveDate.setMyData(vm.myDate);

   //this should save the date for milestones 
   SaveDate.resource.query();
   vm.cleanUp();
};

在我的工厂setMyData 确实提取了这个新值。(这里是代码)

myApp.factory('SaveDate', ['$resource', 'SaveUrl',
function saveDateFactory($resource, SaveUrl) {
  var myData = '';

  //this grabs the data we need for the url below
  function setMyData(data) {
    myData = data;       
  }

  return {

    setMyData: setMyData,
    resource: $resource(myData, {}, {
      query: { method: "POST", params: {}, isArray: false }
    })
  };
}]);

我遇到的问题是 Angular 正在提取空字符串值(缓存值)而不是新值。

一种选择是调用一个控制器函数,我在这个位置设置值:

resource: $resource(myControllerFunction(), {}, {
      query: { method: "POST", params: {}, isArray: false }

但是如果没有与范围和未定义相关的各种错误,我无法在这里调用控制器函数。在任何其他语言中,传递这个值都非常简单。

如果有人知道如何覆盖当前变量的缓存值或如何在此位置调​​用控制器函数,我将不胜感激。感谢您的帮助!

【问题讨论】:

    标签: angularjs controller factory


    【解决方案1】:

    在工厂注入时创建资源,使用myData原始值。

    如果资源是按需创建的,则必须用函数包装。

    ...
    setMyData: setMyData,
    resource: () => $resource(myData, {}, {
      query: { method: "POST", params: {}, isArray: false }
    

    【讨论】:

    • 当我将它添加到我的代码中时,我收到一条错误消息,提示“SaveDate.resource.query”不是函数
    • 因为resource是一个函数,所以应该适当地调用它,SaveDate.resource().query()。如果设置myData和调用resource应该同时进行,可能会方便将url作为函数参数传递,SaveDate.resource(url)...
    • 修复了它。感谢您快速准确的回复!
    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多