如何动态添加 ng-click 处理程序
How to add ng-click handler dynamically
我尝试在之前生成的按钮上添加 ng-click(动态),但效果不佳。我也已经尝试了在这个论坛上找到的所有解决方案,但没有一个效果很好。
我的html代码:
<body class="max_height" ng-app="myApp">
<div class="container max_height" ng-controller="myCtrl">
<div id="play" tabindex="0" ng-init="init()" ng-keydown="keyDown($event)">
{{ content }}
</div>
</div>
<script src="js/angular.min.js"></script>
<script src="js/script.js"></script>
</body>
我的AngularJS代码:
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope, $compile) {
$scope.init = function() {
var el = '<button class="btn" id="start" data-ng-click="startAnimation()">Start</buttom>';
var element = angular.element(document.querySelector('#play'));
var generated = element.html(el);
$compile(generated)($scope);
}
$scope.startAnimation = function(){
console.log("click");
}
});
我的错误是"RangeError: Maximum call stack size exceeded",这是由$compile(generated)($scope)生成的; .来自第一个问题的另一个问题是,如果我单击按钮,那么函数 startAnimation 将执行数百次。
请给我一个解决方案。哪里错了。
这行代码有问题:
$compile(generated)($scope);
应该是:
$compile(generated.contents())($scope);
您可以将函数分配给一个范围变量,并根据您的业务逻辑将适当的函数分配给您的 ng-click。在下面的示例中,$scope.addGeoFence() 添加到 "Add GeoFence" list-item
的 ng-click
$scope.layout = [
{name: 'Home', icon: 'home'},
{name: 'Add Geofence',
icon: 'add_location',
click: $scope.addGeoFence}
];
$scope.addGeoFence = function() {
console.log("calling addGeoFence()");
}
<md-list>
<md-list-item ng-repeat="snav in layout">
<md-button class="md-raised" ng-click="(snav.click)()" flex>
<md-icon md-font-library="material-icons">{{snav.icon}}
</md-icon>
<span>{{snav.name}}</span>
</md-button>
</md-list-item>
</md-list>
我尝试在之前生成的按钮上添加 ng-click(动态),但效果不佳。我也已经尝试了在这个论坛上找到的所有解决方案,但没有一个效果很好。
我的html代码:
<body class="max_height" ng-app="myApp">
<div class="container max_height" ng-controller="myCtrl">
<div id="play" tabindex="0" ng-init="init()" ng-keydown="keyDown($event)">
{{ content }}
</div>
</div>
<script src="js/angular.min.js"></script>
<script src="js/script.js"></script>
</body>
我的AngularJS代码:
var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope, $compile) {
$scope.init = function() {
var el = '<button class="btn" id="start" data-ng-click="startAnimation()">Start</buttom>';
var element = angular.element(document.querySelector('#play'));
var generated = element.html(el);
$compile(generated)($scope);
}
$scope.startAnimation = function(){
console.log("click");
}
});
我的错误是"RangeError: Maximum call stack size exceeded",这是由$compile(generated)($scope)生成的; .来自第一个问题的另一个问题是,如果我单击按钮,那么函数 startAnimation 将执行数百次。
请给我一个解决方案。哪里错了。
这行代码有问题:
$compile(generated)($scope);
应该是:
$compile(generated.contents())($scope);
您可以将函数分配给一个范围变量,并根据您的业务逻辑将适当的函数分配给您的 ng-click。在下面的示例中,$scope.addGeoFence() 添加到 "Add GeoFence" list-item
的 ng-click$scope.layout = [
{name: 'Home', icon: 'home'},
{name: 'Add Geofence',
icon: 'add_location',
click: $scope.addGeoFence}
];
$scope.addGeoFence = function() {
console.log("calling addGeoFence()");
}
<md-list>
<md-list-item ng-repeat="snav in layout">
<md-button class="md-raised" ng-click="(snav.click)()" flex>
<md-icon md-font-library="material-icons">{{snav.icon}}
</md-icon>
<span>{{snav.name}}</span>
</md-button>
</md-list-item>
</md-list>