在我当前的项目中,我有一个函数调用角度自定义服务并将数据分配给变量
var vm = this;
vm.itemname = '';
function getItems(){
var result = myservice.getFromLibrary();
result.then(function(data){
vm.dataSet = data;
});
}
我有另一个保存数据的函数,保存之后应该调用getItem()函数,如下所示
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem);
getItems();
};
但是当调用vm.addItem时,它不会检索getItems函数中的项,但它会给我一个未定义的输出
任何帮助都将非常感谢您解决此问题
答案 0 :(得分:1)
首先,我将函数名称称为错误,getItem
应为getItems
。
如果是拼写错误,请在从服务返回承诺后调用getItems方法。
您甚至可以从回调中添加错误功能。
当您使用此promise(then and error)
时,下一行代码仅在响应来自服务时执行。
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem)
.then(function(response){
getItem();
}
function error(response)
{
console.log('error')
});
};
答案 1 :(得分:0)
函数名称为getItems()
但是当您从addItem
调用它时,您正在调用未定义的函数getItem()
- s
中缺少return
你试图打电话的功能。
答案 2 :(得分:0)
如果我假设正确,则通过服务电话myservice.setToLibrary(newItem);
添加项目,之后通过getItems();
读取数据库中存在的项目,这也是服务电话,即{{1} }。
“未定义”背后的原因'输出强>
正如您在$http POST or GET
函数中看到的那样,您正在进行两次vm.addItem()
次调用以添加和读取。由于$http
本质上是异步的,因此您的$http
执行之前即使你的getItems()
已完全执行。
由于这个原因,你得到一个未定义的输出。
解决方法
在myservice.setToLibrary(newItem)
功能中进行一些调整,如下所示
vm.addItem()
这种方法可以在我们vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem).success(function(data){
getItems();
});
来电成功后进行getItems()
来电,从而获得理想的结果。