将click事件动态绑定到template-url源中的按钮

时间:2016-11-22 14:08:12

标签: angularjs twitter-bootstrap

我正在使用ui-bootstrap angularjs生成向下滑动并添加了一个按钮和单击事件,控制器中有警报消息,但我没有收到任何警报或控制台日志。

我在使用template-url加载的按钮点击时生成警报时遇到问题,如下面的代码所示。我在下面分享我的示例代码。



angular.module('ui.bootstrap.demo', [ 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('AccordionDemoCtrl', function ($scope) {
  console.log("CTRL LOADED");
  $scope.alertMsg = function(){
    alert('hejd');
  }
});

<!doctype html>
<html ng-app="ui.bootstrap.demo">
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.2.0.js"></script>
    <script src="example.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  </head>
  <body>

<div ng-controller="AccordionDemoCtrl">
  <script type="text/ng-template" id="group-template.html">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title" style="color:#fa39c3">
        <button ng-click="alertMsg()">Btn</button>
          <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading">
            <span uib-accordion-header ng-class="{'text-muted': isDisabled}">
              {{heading}}
            </span>
          </a>
        </h4>
      </div>
      <div class="panel-collapse collapse" uib-collapse="!isOpen">
        <div class="panel-body" style="text-align: right" ng-transclude></div>
      </div>
    </div>
  </script>

  
  <uib-accordion close-others="oneAtATime">
    
    <div uib-accordion-group class="panel-default" is-open="status.isCustomHeaderOpen" template-url="group-template.html">
      <uib-accordion-heading>
        Custom template with custom header template <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.isCustomHeaderOpen, 'glyphicon-chevron-right': !status.isCustomHeaderOpen}"></i>
      </uib-accordion-heading>
      World
    </div>
    
  </uib-accordion>
</div>
  </body>
</html>
&#13;
&#13;
&#13;

我确实得到了日志&#34; CTRL LOADED&#34;。但是当我点击时,我没有得到警告信息。

2 个答案:

答案 0 :(得分:0)

我相信该面板会创建自己的范围,因此您需要调用父范围来获取警告消息,如下所示:

    <div ng-controller="AccordionDemoCtrl">
  <script type="text/ng-template" id="group-template.html">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title" style="color:#fa39c3">
        <button ng-click="$parent.alertMsg()">Btn</button>
          <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading">
            <span uib-accordion-header ng-class="{'text-muted': isDisabled}">
              {{heading}}
            </span>
          </a>
        </h4>
      </div>
      <div class="panel-collapse collapse" uib-collapse="!isOpen">
        <div class="panel-body" style="text-align: right" ng-transclude></div>
      </div>
    </div>
  </script>

这是Plunker

答案 1 :(得分:-1)

语法controllerAs并不漂亮,实际上你需要使用它。

<button ng-click="orderCtrl.alertMsg()">Btn</button>