2016-09-23 120 views
-1

执行。在我当前的项目,我有要求的角度定制服务的功能和数据分配给一个变量功能不会JS

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

添加项目不会返回任何内容,所以它应该是未定义的。 –

+0

除了getItems!== getitem问题之外,不知道它是否相关,但是'myservice.getFromLibrary();'显然是异步的,所以'vm.dataSet'不会被设置,直到“一段时间之后”给vm的电话。addItem' –

回答

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') 
    }); 
}; 
+0

Hai @mujahid,你试过这个吗? – Sravan

+0

Hi @Sravan,谢谢你的回复。是的,它的作品。这个问题出现在服务文件中,因为我之前尝试过这种方法,我得到一个错误,说'then'没有被定义,但是当我检查服务文件时,它没有返回一个承诺,我也修复了它。现在它完美地工作。感谢您的回答 – Mujahid

0

的函数名称为getItems()但是当你从addItem调用它,你调用一个未定义功能getItem() - 在s中缺少你的函数的名称试图打电话。

+0

感谢您指出,它是我写它时的错字,它不是在实际的代码 – Mujahid

0

如果我假设的权利,你是通过服务调用myservice.setToLibrary(newItem);后,阅读出现在DB的项目,通过getItems();这又是一个服务调用即$http POST or GET添加的项目。在“未定义”输出

正如你可以在你的vm.addItem()功能看到你正在做两$http调用添加和read.As $http在本质上是异步的,背后

原因,你getItems()甚至之前执行的myservice.setToLibrary(newItem)完全执行。

由于这样你得到一个未定义的输出。

解决办法

让你vm.addItem()功能进行一些调整类似下面

vm.addItem = function(){ 
    var newItem = {"title": vm.itemname}; 
    myservice.setToLibrary(newItem).success(function(data){ 
     getItems(); 
    }); 

这种做法会得到你想要的结果,因为我们我们setToLibrary()呼叫成功后,使我们getItems()电话。

+0

感谢您的简短明确的解释,我尝试了@ Sravan的答案,它为我工作。 – Mujahid

+0

太棒了!不客气 :) –