我有angularjs项目在主页上我想从我的mongodb数据库中显示几个选定的文章(对象)。在数据库中,我有两个集合 - 一个是'文章',有几百个单独的文章(对象),另一个是'主页',其中我只有十个对象只有'articleID'键,其中包含来自的对象的id第一次收藏。我的问题是,当我在控制器中硬编码articleID时一切正常,但是当我第一次从'homepage'集合中获取articleID然后将该值传递给函数'getArticle01'时,它从第一个集合中获取所选对象它不起作用。拜托,任何人都可以让我知道我做错了吗?
这是我的代码:
var articleId01 = '58da9967a8bccd763c48bdc0'; // if i hardcode article id here, all works fine
HomepageService
.findAllHomepages() // returns array with 10 objects from my api
.then(function(homepages) {
var articleId01 = homepages.data[0].articleID;
console.log(articleId01); // so far, all is ok, console logs value: '58da9967a8bccd763c48bdc0'
}, function(error) {
console.log('error', error);
})
.then(function(){
function getArticle01() {
HomepageService
.findHomepageById(articleId01) // unfortunately, value is not passed here
// .findHomepageById('58da9967a8bccd763c48bdc1') // if value is hardcoded, all is ok
.then(function(response) {
console.log(response.data);
}, function(error) {
console.log('error', error); // here is error from console: Object {data: null, status: -1, config: Object, statusText: "", headers: function}
});
}
getArticle01();
});
答案 0 :(得分:0)
你能做什么,对我来说真的很好,就是在你的服务中为这个id建立一个getter / setter。
关于您的服务:
return {
setId: setId,
getId: getId,
...}
function setId(str) {
idStr = str;
}
function getId() {
return idStr;
}
然后您可以在致电您的服务之前进行设置:
HomepageService.setId('your_id');
在您的服务中,您可以将其称为:
var myId = getId(); // and use it
它对我非常有用,让我的代码非常干净。我希望它有所帮助。 你可以用它们做很多事情,这里有更多信息:
答案 1 :(得分:0)
问题是var articleId01
属于第一个then()
函数的范围。它在第二个then()
内不可见
如果您在第一个articleId01
结束时返回then()
并在第二个then()
中将其用作参数,则可以获得该信息:
HomepageService
.findAllHomepages() // returns array with 10 objects from my api
.then(function(homepages) {
var articleId01 = homepages.data[0].articleID;
//Return your id
return articleId01;
}, function(error) {
console.log('error', error);
})
//Get your id
.then(function(articleId){
function getArticle01() {
HomepageService
//Use the id
.findHomepageById(articleId)
.then(function(response) {
console.log(response.data);
}, function(error) {
console.log('error', error);
});
}
getArticle01();
});