javascript - 如何定义一个包含方法并可以由 `ng-click` 调用的 Angular Directive(指令)?

标签 javascript angularjs angularjs-directive

我想定义一个指令,它将首先显示第一个包含按钮的子项。如果我们单击该按钮,第二个子级将取代第一个。

HTML:

<div show-more>
  <div>short <button ng-click="showMore()">click-me to show more</button></div>
  <div>full</div>
</div>

Angular :

angular.module("app", [])
.directive("showMore", function() {
  return {
    restrict: 'A',
    scope: {},
    link: function(scope, element, attrs) {

      var children = element.children();
      var short = children[0];
      var full = children[1];

      element.empty().append(short);

      scope.showMore = function() {
        element.empty().append(full);
      };

    }
  };
});

问题是,当我单击按钮时,没有任何反应。我尝试了很多,但还是不行。

您可以在此处观看现场演示:http://jsbin.com/rugov/2/edit

如何解决?

最佳答案

由于您要更改指令的 element 的 DOM,因此您需要重新 $compile 元素,如下所示:

.directive("showMore", function($compile) {
  return {
    restrict: 'A',
    scope: {},
    link: function(scope, element, attrs) {

      var children = element.children();
      var short = children[0];
      var full = children[1];

      element.empty().append(short);
      $compile(element.contents())(scope);

      scope.showMore = function() {
        element.empty().append(full);
      };

    }
  };
});

Working Example

关于javascript - 如何定义一个包含方法并可以由 `ng-click` 调用的 Angular Directive(指令)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26043620/

相关文章:

javascript - 当enablecolumnorder等于false且ressized等于false时,Slickgrid强制列适应视口(viewport)大小?

javascript - 使用 Ember JS 时 jQuery 'on' 事件不同

javascript - Ace editor blockScrolling 在哪里设置?

javascript - AngularJS 过滤器将 html 作为字符串返回

angularjs - 从具有隔离范围的 Angular 指令访问自定义过滤器

javascript - $parsers-array 中的函数未在自定义指令中调用

javascript - Angularjs:选择列表的 ng-change

javascript - 如何在 React Native 中裁剪图像,使其看起来像圆形而不是矩形?

javascript - 根据您之前选择的内容过滤 Angular 下拉功能

javascript - 如何从 Controller 更新集合数组中的模型