Javascript 在两个地方调用相同的函数只对一个实例有效
我有一个angularjs应用程序,我在其中调用一个函数foo(bar),该函数将bar作为参数。该条是来自web api的数据。我使用ng repeat循环浏览这些数据,结果都很好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
<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
}