javascript - AngularJS 将字符串作为函数传递给 ng-click

标签 javascript html angularjs angularjs-scope angularjs-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>

但是我的想法都没有成功。如何在 ng-lick 中分配 javascript 函数名称?顺便提一句。函数本身是 $scope 的一部分。

编辑 - 这是 Controller :

“$menu”服务只是一个 get rest 请求。请求结果是一个 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>

Controller

function TodoCtrl($scope) {

    $scope.callFunction = function (name){
        if(angular.isFunction($scope[name]))
           $scope[name]();
    }

    $scope.testClick = function(){
        alert("Called");
    }
}

Working Fiddle

希望对您有所帮助。谢谢。

关于javascript - AngularJS 将字符串作为函数传递给 ng-click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540598/

相关文章:

javascript - Protractor 无法点击 <a> 元素内的嵌入 <span>

javascript - MathJax 不使用 Angular 渲染

javascript - 将日期和时间转换为当前毫秒 (JavaScript)

javascript - 更改间隔

javascript - 如何在开始时在 Javascript 对象中添加键/值对

javascript - 使用 Javascript 代码自动填充登录网页的输入凭据

html - 通过HTML5从系统音频或浏览器捕获音频

javascript - 在div中获取具有相同类名的div

javascript - Safari 视频元素不会在 403 响应时触发错误事件

javascript - 在react redux中唯一地计算某些元素