2017-04-06 97 views
0

我有angularjs项目,在主页上我想从我的mongodb数据库中显示几个选定的文章(对象)。在数据库中,我有两个集合 - 一个是包含几百个单独文章(对象)的“文章”,另一个是“主页”,其中我只有十个对象,只有'articleID'键,其中包含对象的ID第一次收集。我的问题是,当我硬编码控制器中的articleID所有工作正常,但是当我首先从'homepage'集合中获取articleID,然后将该值传递给从第一个集合中获取选定对象的函数'getArticle01'它不起作用。请,任何人都可以让我知道我做错了什么?如何在angularjs控制器中将参数值传递给服务函数?

这里是我的代码:

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

您重新定义articleId01这里:VAR articleId01 =主页。数据[0] .articleID;所以当你在另一个函数中需要它时,它不存在。也许使用范围变量? – Groben

回答

0

的问题是,var articleId01在第一then()功能的范围。它在第二个then()内不可见。
你能得到它,如果你在你的第一个then()的最后返回articleId01并在第二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(); 
 

 
    });

+0

非常感谢你,但它没有奏效。 'var articleId01'在第二个范围内仍然不可见。我已经尝试过相同的方法,但它不起作用,我真的不明白为什么。不过,非常感谢你的建议... – user7827012

+0

也许我误会了你,但是你还想在第二个.then()中获得'var articleId01'吗?在我的例子中,这个变量作为'articleId'传递给第二个.then(),所以它是可见的。 :)请参阅:'.findHomepageById(articleId)' – flow3r

+1

嗨,对于迟到的答复抱歉,但你绝对是100%的权利。这是我的代码中的另一个错误,“导致我的应用程序崩溃,并且我没有注意到它,因为我已经在stackowerflow编辑器中编写了此代码段,并且未从我的JavaScript文件中复制 - 因此此处的代码是正确且相同的代码在我的应用程序中有额外的错误... :-(再次,非常感谢你,这么多你的帮助! – user7827012

0

你能做些什么,和它的作品对我真的很好是建立一个getter/setter方法为这个ID您的服务中。

您的服务:

return { 
    setId: setId, 
    getId: getId, 
...} 

    function setId(str) { 
     idStr = str; 
    } 
    function getId() { 
     return idStr; 
    } 

然后,你可以调用服务之前设置:

HomepageService.setId('your_id'); 

而且你的服务中,你可以这样调用它:

var myId = getId(); // and use it 

其真的很有用,并保持我的代码非常干净。我希望它有帮助。 你可以在这里做了很多与他们一些更多的信息:

Getters- Setters

相关问题