AngularJS 指令,在元素后插入 HTML

AngularJS Directive, Insert HTML after element

在我正在开发的应用程序中,整个应用程序中都提到了人名。我希望能够在点击任何出现的人时显示联系人卡片 - 基本上是一个带有他们联系信息的小弹出窗口。

我为此使用 Angular,并使用指令将其拼凑在一起。 HTML 看起来像这样:

<a class="user" ng-person person="{{event.actor}}">{{event.actor}}</a>

而且,我有一个如下所示的指令:

angular.module('myApp').directive('person', function($timeout){
  var link = function(scope, el, attr){
    var person = attr.person;
    $timeout(function(){
      $(el).popup();
    }, 0);
    el.after("<div class='ui special popup'><div class='ui header'>"+person+"</div></div>");
  }

  return {
    link: link
  }

});

基本上,我在这里做的是使用指令来标记我希望它显示的元素 'ng-person',并让它直接在之后插入弹出元素。

我的主要问题是:我想将 el.after() 中的 HTML 字符串拆分到它自己的文件中,这样更容易管理。有没有一种好方法可以将另一个文件中的 HTML 字符串导入到这样的指令中?

另外 - 可能有一个完全更好的方法来完成这项工作。有的话我洗耳恭听

仅供参考 - 我在 UI 部分使用 Semantic UI,因此弹出语法是通过它们的框架实现的。

谢谢!

我对你的建议是将其包装到一个指令中,该指令还包括人(使用 ng-if )和主要元素 然后您可以使用控制器更改任何有效的信息以显示该信息 你将负责所有发生的事情

有一种出色的内置方法可以完成您想要做的事情!使用 $templateRequest service 从服务器位置下载 HTML 文件。这真的很方便,因为 Angular 然后会缓存这个 HTML,以后只要你请求它,就会从缓存而不是服务器中提取它!

但是,如果您想真正按照 Angular 的方式做事,那么这样做可能更有意义:

angular
  .module('app')
  // I recommend against something like 'ngPerson' since
  // ng prefix is usually used for Angular built-in directives
  .directive('abcPersonCard', function() {
    return {
      restrict: 'E',
      scope: {
        person: '='
      },
      templateUrl: '/partials/abcPersonCard.html',
      // link, controller, etc.
    };
  }

然后在您的模板中...

/partials/abcPersonCard.html

<a class="user">{{person}}</a>
<div class="card">
  <!-- card stuff -->
</div>

然后你可以像这样使用它而不是常规的 link 任何你想要卡片的地方:

<abc-person-card person="event.actor"></abc-person-card>

我推荐一个带有锚点和 div 内容的模板的指令:

app.directive('actor', function() {
   return {
      restrict: 'E',
      scope: { person: '=' },
      templateUrl: 'person.html'
   }
});

Person.html

<a class="user">{{person.actor.name}}</a>
<div class="ui special popup">
    <div class="ui header"> 
       {{ person.actor.age }}
     </div>
 </div>");

用法

<actor person="famousPerson"></actor>

这种安排让您可以完全控制 HTML,可以访问 person 和您想要创建的任何绑定。