Javascript 在两个地方调用相同的函数只对一个实例有效

Javascript 在两个地方调用相同的函数只对一个实例有效,javascript,angularjs,angular-promise,Javascript,Angularjs,Angular Promise,我有一个angularjs应用程序,我在其中调用一个函数foo(bar),该函数将bar作为参数。该条是来自web api的数据。我使用ng repeat循环浏览这些数据,结果都很好 <li class="list-group-item" ng-repeat = "tag in subreddit.tags"> <a href="javascript:void(0);" ng-click="subreddit.getData(tag)" target="_bla

我有一个angularjs应用程序,我在其中调用一个函数foo(bar),该函数将bar作为参数。该条是来自web api的数据。我使用ng repeat循环浏览这些数据,结果都很好

<li class="list-group-item" ng-repeat = "tag in subreddit.tags">
        <a href="javascript:void(0);" ng-click="subreddit.getData(tag)" target="_blank">{{tag.data.url}}</a>

      </li>
  • 在这里,getData函数运行良好。现在,在同一个应用程序中,我定义了另一个getData实例,如下所示:

        <button class="btn btn-success btn-block" ng-click="subreddit.getData(tag);">Load Feeds...</button>
    
    加载提要。。。
    
    这一次get data无法正常工作,因为参数标记未定义,而ng repeat则是从数据中发送的

    我知道很难重新表述这个问题,所以我放了一个演示来说明这个问题

    复制步骤:

    单击reddit链接,数据将正确填充,正如您在控制台中看到的那样

    但是如果你点击红色按钮LoadFeeds调用相同的函数,它就不起作用了。有人能告诉我如何让这个工作或我做错了什么

    发行演示:


    您没有定义另一个实例,您仍然使用同一个控制器,但现在,由于您已经在编写时没有有效的数据对象。因为您不在重复循环中,所以标记是未知的


    您可以添加一个鼠标点击处理程序,将所选标记保存在控制器中,并使用此标记进一步加载。

    我真的不明白这个问题,但我认为您误解了这个概念,这里是一个可以帮助您的程序

    <!DOCTYPE html>
    <html ng-app="MyApp">
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
      <meta charset="utf-8">
      <title>JS Bin</title>
    </head>
    <body>
      <div class="first" ng-controller="SubRedditController as subreddit">
    
       <ul class="list-group">
        <!-- you have declared tag variable over here so scope of the tag variable will be in below li only
        {from here -->
          <li class="list-group-item" ng-repeat = "tag in subreddit.tags">
            <a href="javascript:void(0);" ng-click="subreddit.getTagAssociatedData(tag)" target="_blank">{{tag.data.url}}</a>
    
          </li>
        <!-- to here} -->
    
         <ul>
            <li class="list-group-item" ng-if="subreddit.full_description">
            {{subreddit.full_description.description}}
            <!-- <button class="btn btn-success btn-block" ng-click="subreddit.getTagAssociatedData(tag);">Load Feeds...</button> -->
            <!-- you can not access tag variable over here because it is undefined. -->
          </li>
         </ul>
      </div>
    
    </body>
    </html>
    

    看不出你期望它如何工作。该函数获取一个参数,如果是按钮,则没有任何内容。单击按钮时要使用的标记是什么?这里的问题是逻辑,而不是代码
    vm.getTagAssociatedData = function(data) { 
    // as data is undefined in second case          
    var full_description = data.data; // full_description = undefiend
    vm.full_description = full_description; // vm.full_description = undefined  
              console.log(data); // no output
            }