Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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
Restangular javascript typeError stuff.put不是一个函数,但它是一个函数,而且它也在工作_Javascript_Angularjs_Angularjs Directive_Restangular - Fatal编程技术网

Restangular javascript typeError stuff.put不是一个函数,但它是一个函数,而且它也在工作

Restangular javascript typeError stuff.put不是一个函数,但它是一个函数,而且它也在工作,javascript,angularjs,angularjs-directive,restangular,Javascript,Angularjs,Angularjs Directive,Restangular,我的重启语言设置中有奇怪的“无错误”。即使将错误记录到控制台,Stuff也可以正常工作 我使用了一种组件驱动的方法和一个解耦的重启服务工厂(clientService)。服务工厂被注入控制器并绑定到this.clients=clientService 在clientrecord小部件的链接功能中,我获得一个特定的客户端,并观察另一个指令对client.keywords所做的更改 link: function (scope, element, attrs, ctrl) { var cid

我的重启语言设置中有奇怪的“无错误”。即使将错误记录到控制台,Stuff也可以正常工作

我使用了一种组件驱动的方法和一个解耦的重启服务工厂(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();
        }
    );
}
代码运行良好。关键字由另一个小部件编辑,检测到更改,发出put请求,关键字最终进入数据库。但chrome和firefox都会抛出一个错误:

"typeError: scope.client.put" is not a function"          
目前,这只是一种烦恼,但它会进一步演变成令人讨厌的行为吗?我能修一下吗?我需要打字吗

该服务本身基本上是一条航线:

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

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

尝试在watcher中的
scope.client
上添加存在性检查(不是好的解决方案):

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

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

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

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

你能把剩下的代码贴出来吗?在最远处的服务least@AnidMonsur在前两个选项上面添加的服务工厂没有改变任何东西。ctrl.clients确实返回了一个承诺(因此使用.object方法获取商品),但当我尝试解决该承诺时,它停止工作。显然,我无法解析link函数中的承诺。坦率地说,我不知道这个承诺何时或如何得到解决——它只是神奇地起作用。我可能需要再看几遍文档;-)但是谢谢你的努力!
scope.client = [];
scope.client = ctrl.clients.one(cid).get().$object;
ctrl.clients.one(cid).get().then(function(data){
    scope.client = data;
    scope.$watchCollection(/* watcher; */);
});