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

时间:2017-04-06 13:10:39

标签: angularjs

我有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();

  });

2 个答案:

答案 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

它对我非常有用,让我的代码非常干净。我希望它有所帮助。 你可以用它们做很多事情,这里有更多信息:

Getters- Setters

答案 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();

  });