AngularJS 将字符串作为函数传递给 ng-click
AngularJS pass string as function to use at ng-click
我想为 ng-click 分配一个 javascript 函数,其名称来自其他服务。
<li ng-class="{ active: isActive('url')}" data-ng-repeat="menu in mb.data">
<a href="{{menu.href}}" data-ng-click="{{menu.javascript}}">{{menu.label}}</a>
</li>
遗憾的是,如果在 ng-click 中使用 {{ }},angularjs 解析器会抛出异常。所以我尝试了几种解决方法,比如使用回调函数
<a href="{{menu.href}}" data-ng-click="call(menu.javascript)">{{menu.label}}</a>
但是 none 我的想法成功了。如何在 ng-lick 中分配 javascript 函数名称?顺便提一句。函数本身是 $scope.
的一部分
编辑 - 这是控制器:
“$menu”服务只是一个休息请求。请求结果是一个 json 对象,只包含字符串值。在本期中,menu.javascript 的结果是 "loginModal()"。
.controller('HeaderController', function($scope, $http, ModalService, $menu, $routeParams) {
$scope.loginModal = function() {
console.log("modal", ModalService);
// Just provide a template url, a controller and call 'showModal'.
ModalService.showModal({
templateUrl: "/modals/login.modal.html",
controller: "LoginController"
}).then(function(modal) {
// The modal object has the element built, if this is a bootstrap modal
// you can call 'modal' to show it, if it's a custom modal just show or hide
// it as you need to.
console.log(modal.element);
modal.element.modal();
modal.close.then(function(result) {
console.log(result ? "You said Yes" : "You said No");
});
});
};
$menu.get($routeParams, function(data){
$scope.menu = data;
});
})
编辑 2:
有趣的是,当我使用 {{menu.javascript}} 时,正确的字符串 "loginModal()" 在 DOM 中可用。但是 angular 解析器由于错误而停在那里。
你可以这样做
HTML
<div ng-controller="TodoCtrl">
<button ng-click="callFunction('testClick')">CLICK ME</button>
</div>
控制器
function TodoCtrl($scope) {
$scope.callFunction = function (name){
if(angular.isFunction($scope[name]))
$scope[name]();
}
$scope.testClick = function(){
alert("Called");
}
}
希望对您有所帮助。谢谢
您可以使用 hashmap 表示法访问 'this' 对象的 属性(在本例中为 $scope):
<li ng-class="{ active: isActive('url')}" data-ng-repeat="menu in mb.data">
<a href="{{menu.href}}" data-ng-click="this[menu.javascript]()">{{menu.label}}</a>
</li>
我想为 ng-click 分配一个 javascript 函数,其名称来自其他服务。
<li ng-class="{ active: isActive('url')}" data-ng-repeat="menu in mb.data">
<a href="{{menu.href}}" data-ng-click="{{menu.javascript}}">{{menu.label}}</a>
</li>
遗憾的是,如果在 ng-click 中使用 {{ }},angularjs 解析器会抛出异常。所以我尝试了几种解决方法,比如使用回调函数
<a href="{{menu.href}}" data-ng-click="call(menu.javascript)">{{menu.label}}</a>
但是 none 我的想法成功了。如何在 ng-lick 中分配 javascript 函数名称?顺便提一句。函数本身是 $scope.
的一部分编辑 - 这是控制器:
“$menu”服务只是一个休息请求。请求结果是一个 json 对象,只包含字符串值。在本期中,menu.javascript 的结果是 "loginModal()"。
.controller('HeaderController', function($scope, $http, ModalService, $menu, $routeParams) {
$scope.loginModal = function() {
console.log("modal", ModalService);
// Just provide a template url, a controller and call 'showModal'.
ModalService.showModal({
templateUrl: "/modals/login.modal.html",
controller: "LoginController"
}).then(function(modal) {
// The modal object has the element built, if this is a bootstrap modal
// you can call 'modal' to show it, if it's a custom modal just show or hide
// it as you need to.
console.log(modal.element);
modal.element.modal();
modal.close.then(function(result) {
console.log(result ? "You said Yes" : "You said No");
});
});
};
$menu.get($routeParams, function(data){
$scope.menu = data;
});
})
编辑 2:
有趣的是,当我使用 {{menu.javascript}} 时,正确的字符串 "loginModal()" 在 DOM 中可用。但是 angular 解析器由于错误而停在那里。
你可以这样做
HTML
<div ng-controller="TodoCtrl">
<button ng-click="callFunction('testClick')">CLICK ME</button>
</div>
控制器
function TodoCtrl($scope) {
$scope.callFunction = function (name){
if(angular.isFunction($scope[name]))
$scope[name]();
}
$scope.testClick = function(){
alert("Called");
}
}
希望对您有所帮助。谢谢
您可以使用 hashmap 表示法访问 'this' 对象的 属性(在本例中为 $scope):
<li ng-class="{ active: isActive('url')}" data-ng-repeat="menu in mb.data">
<a href="{{menu.href}}" data-ng-click="this[menu.javascript]()">{{menu.label}}</a>
</li>