【问题标题】:Restangular javascript typeError stuff.put is not a function, but it is - and it is working tooRestangular javascript typeError stuff.put 不是一个函数,但它是 - 而且它也在工作
【发布时间】:2015-09-01 22:14:28
【问题描述】:

我的 restangular 设置中有奇怪的“非错误”。即使错误被记录到控制台,东西也能正常工作。

我使用组件驱动的方法和解耦的 restangular 服务工厂 (clientService)。将服务工厂注入控制器并绑定this.clients = clientService;

在 clientrecord 小部件的链接函数中,我得到一个特定的客户端并观察另一个指令对 client.keywords 所做的更改。

link: function (scope, element, attrs, ctrl) {
    var cid = $stateParams.clientid;
    scope.client = ctrl.clients.one(cid).get().$object;

    scope.$watchCollection('client.keywords', 
        function (newval, oldval, scope) {
            scope.client.put();
        }
    );
}

代码运行良好。关键字由另一个小部件编辑,检测到更改,发出请求,关键字最终进入数据库。但是chrome和firefox都报错:

"typeError: scope.client.put" is not a function"          

目前这只是一种烦恼,但它会进一步演变成令人讨厌的行为吗?我可以修复它吗?我需要进行类型转换吗?

Service 本身基本上是单行的:

(function () {
  'use strict';
  angular
    .module('client')
    .factory('clientService', ClientService);
  ClientService.$inject = ['Restangular','$stateParams'];

  function ClientService(Restangular) {
    return Restangular.service('routes/clients');
  }
}());

【问题讨论】:

  • 你能把剩下的代码贴出来吗?最起码的服务
  • @AnidMonsur 服务工厂添加在上面

标签: javascript angularjs angularjs-directive restangular


【解决方案1】:

尝试在观察者中对scope.client添加存在检查(不是好的解决方案):

function (newval, oldval, scope) {
    scope.client = scope.client ? scope.client : [];
    scope.client.put();
}

或者在scope.client创建之前(稍微好一点的解决方案):

scope.client = [];
scope.client = ctrl.clients.one(cid).get().$object;

更新:
或者(更好的方法),如果ctrl.clients 返回promise,则在数据加载后创建观察者。像这样的:

ctrl.clients.one(cid).get().then(function(data){
    scope.client = data;
    scope.$watchCollection(/* watcher; */);
});

但这只是推测,因为我不知道ctrl.clients的结构;

【讨论】:

  • 前两个选项没有改变任何东西。 ctrl.clients 确实返回了一个承诺(因此 .$object 方法来获取货物),但是当我尝试解决承诺时,它停止工作。显然我无法解决链接函数中的承诺。坦率地说,我不知道承诺何时或如何得到解决——它只是神奇地起作用。我可能需要多看几次文档;-) 但是感谢您的尝试!
猜你喜欢
  • 2019-08-05
  • 1970-01-01
  • 2021-11-06
  • 2022-07-27
  • 2016-04-05
  • 2021-11-13
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多