Javascript ng click在动态div上不起作用
我正在开发一个带有angular的应用程序,我需要从Web服务插入一些数据。我动态创建div:Javascript ng click在动态div上不起作用,javascript,angularjs,angularjs-ng-click,Javascript,Angularjs,Angularjs Ng Click,我正在开发一个带有angular的应用程序,我需要从Web服务插入一些数据。我动态创建div: for(var i = 0 ; i < data.Output.length ; i++){ var listitem = document.createElement("div"); listitem.setAttribute("ng-click","doMove()"); listitem.className = "list
for(var i = 0 ; i < data.Output.length ; i++){
var listitem = document.createElement("div");
listitem.setAttribute("ng-click","doMove()");
listitem.className = "list-item";
var name = document.createElement("span");
name.className = "name"
name.appendChild(document.createTextNode(data.Output[i].name));
var link = document.createElement("a");
link.appendChild(document.createTextNode('›'));
listitem.appendChild(name);
listitem.appendChild(link);
wrapper.appendChild(listitem);
}
正如一条评论所建议的,您应该尝试使用
ng repeat
以声明的方式执行此操作。但是,如果您在JS中无法执行此操作,则应该制定一个指令。为了将angular ish构造附加到新创建的指令DOM内容,您需要使用$compile
服务
对于ng重复
<div ng-repeat="item in data.output">
<div class="list-item" ng-click="doMove()">
<span>...</span>
</div>
</div>
用ng repeat试一试。我假设您使用的是$scope
,而不是控制器作为
:
<div ng-repeat="d in data.Output" ng-show="data" ng-click="doMove()">
<span>{{d.name}}</span>
</div>
{{d.name}
通过使用ng show=“data”
仅当设置了data
时,才会显示div。因此,在默认情况下将其设置为false
或null
或undefined
我很快就为您设置了一个plunkr。
angular.module('plunker',[]);
角模('plunker')
.组件('列表'{
控制器:“ListController”,
templateUrl:'list.html'
})
.controller('ListController',function(){
this.listItems=[
{name:'item 1',value:'Description to Description the item.'},
{name:'item 2',value:'Description to Description the item.'},
{name:'item 3',value:'Description to Description the item.'},
{name:'item 4',value:'Description to Description the item.'},
{name:'item 5',value:'Description to Description the item.'}
];
});代码>
-
{{item.name}}
{{item.value}}
也许您应该研究一下创建动态内容的ng repeat
。否则,angular将无法了解这些属性和函数。如果这还不够的话,请查看$compile
,但我会选择ng-repeat@Hoyen你不必粗鲁。。。如果我知道angular,我不会一直问你谢谢@Astasiancan你能告诉我如何使用ng repeat转换它吗。我没有弄明白:)@AstasianYes我将以回答的形式编写我正在控制器中获取数据,如果这是您的意思,您是将控制器中的数据设置为$scope.data=receivedData
,还是将控制器用于html中,如ng controller=“Ctrl as c”
?在cotroller中,我执行http请求。将业务逻辑从控制器中拆分为服务始终是一个好主意。因此,如果我将data.Output指定给一个变量,那么我可以通过$ctrl在页面中访问它。该变量?是的,这是正确的。顺便说一下,你应该看看Angular By CodeSchool的免费视频课程:这对我开始理解Angular.request.success(function(data){item=data.Output;})有很大帮助;那么我应该能够通过$ctrl.item访问它?我已经更新了我的plunkr以使用以下API数据:。看@BogdanConstantin这对你有帮助吗?还是你仍然有困难?
<div ng-repeat="item in data.output">
<div class="list-item" ng-click="doMove()">
<span>...</span>
</div>
</div>
function linkFunc($scope, elem, attrs){
//make sure to inject the $compile service in your directive
$compile( elem )( $scope )
}
<div ng-repeat="d in data.Output" ng-show="data" ng-click="doMove()">
<span>{{d.name}}</span>
</div>