如何将参数值传递给angularjs控制器中的服务函数?

如何将参数值传递给angularjs控制器中的服务函数?,angularjs,Angularjs,我有一个angularjs项目,我想在主页上显示几个从mongodb数据库中选择的文章(对象)。在数据库中,我有两个集合——一个是包含几百个独立文章(对象)的“文章”,另一个是“主页”,其中我只有十个对象,其中只有“articleID”键,其中包含第一个集合中对象的id。我的问题是,当我在控制器中硬编码articleID时,一切正常,但当我首先从“homepage”集合获取articleID,然后将该值传递给函数“getArticle01”,该函数从第一个集合获取所选对象时,它不起作用。拜托,有

我有一个angularjs项目,我想在主页上显示几个从mongodb数据库中选择的文章(对象)。在数据库中,我有两个集合——一个是包含几百个独立文章(对象)的“文章”,另一个是“主页”,其中我只有十个对象,其中只有“articleID”键,其中包含第一个集合中对象的id。我的问题是,当我在控制器中硬编码articleID时,一切正常,但当我首先从“homepage”集合获取articleID,然后将该值传递给函数“getArticle01”,该函数从第一个集合获取所选对象时,它不起作用。拜托,有人能告诉我我做错了什么吗

这是我的密码:

var articleId01='58da9967a8bccd763c48bdc0';//如果我在这里硬编码文章id,一切正常
主页服务
.findAllHomepages()//从我的api返回包含10个对象的数组
.then(功能(主页){
var articleId01=主页。数据[0]。articleID;
console.log(articleId01);//到目前为止,一切正常,控制台日志值:'58DA9967A8BCD763C48BDC0'
},函数(错误){
console.log('error',error);
})
.然后(函数(){
函数getArticle01(){
主页服务
.findHomepageById(articleId01)//很遗憾,这里没有传递值
//.findHomepageById('58DA9967A8BCD763C48BDC1')//如果值是硬编码的,则一切正常
.然后(功能(响应){
console.log(response.data);
},函数(错误){
console.log('error',error);//这里是来自控制台的错误:对象{data:null,状态:-1,配置:对象,状态文本:“”,头:函数}
});
}
getArticle01();

});您所能做的是,在您的服务中为这个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
这对我来说非常有用,并且可以保持我的代码非常干净。我希望有帮助。 你可以用它们做很多事情,这里有更多信息:


问题在于
var articleId01
在第一个
then()
函数的范围内。它在第二个
then()中不可见
如果在第一个
then()
末尾返回
articleId01
,并将其用作第二个
then()
中的参数,则可以获取该参数:

主页服务
.findAllHomepages()//从我的api返回包含10个对象的数组
.then(功能(主页){
var articleId01=主页。数据[0]。articleID;
//返回您的身份证
退回第ID01条;
},函数(错误){
console.log('error',error);
})
//拿你的身份证
.then(函数(articleId){
函数getArticle01(){
主页服务
//使用id
.findHomepageById(articleId)
.然后(功能(响应){
console.log(response.data);
},函数(错误){
console.log('error',error);
});
}
getArticle01();

});在此处重新定义articleId01:var articleId01=homepages.data[0].articleID;所以当你在另一个函数中需要它时,它并不存在。也许使用范围变量?非常感谢,但它不起作用var articleId01'在秒内仍然不可见。然后是作用域。我已经尝试过同样的方法,但没有成功,我真的不知道为什么。尽管如此,非常感谢您的建议……也许我误解了您的意思,但您是否仍希望在第二个中获得“var articleId01”。然后()?在我的示例中,此变量作为“articleId”传递到第二个.then()中,因此它是可见的。:)请参阅:'.findHomepageById(articleId)'您好,很抱歉延迟回复,但您完全正确。这是我代码中的另一个错误,导致我的应用程序崩溃,我没有注意到,因为我在stackowerflow编辑器中编写了这个代码片段,而不是从我的javascript文件中复制的——因此这里的代码是正确的,我的应用程序中的相同代码还有其他错误…:-(再次感谢您的帮助!我很高兴能帮上忙。:)