Javascript AngularJS指令,在元素后插入HTML

Javascript AngularJS指令,在元素后插入HTML,javascript,angularjs,semantic-ui,Javascript,Angularjs,Semantic Ui,在我正在开发的应用程序中,整个应用程序都会提到人们的名字。我想能够显示任何人的联系卡点击显示-基本上是一个小弹出他们的联系信息 我用Angular来做这个,并用指令把它拼凑起来。HTML如下所示: <a class="user" ng-person person="{{event.actor}}">{{event.actor}}</a> angular.module('myApp').directive('person', function($timeout){ v

在我正在开发的应用程序中,整个应用程序都会提到人们的名字。我想能够显示任何人的联系卡点击显示-基本上是一个小弹出他们的联系信息

我用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
  }

});
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.
    };
  }
用于事物的UI部分,因此弹出式语法是通过它们的框架实现的


谢谢

我给你的建议是,将其总结成一个指令,该指令还包括人员(带有ng if)和主要元素 然后,您可以使用控制器更改任何可以显示该信息的内容
您将负责所有正在发生的事情

我给您的建议是将其总结成一个指令,其中还包括人员(带有ng if)和主要元素 然后,您可以使用控制器更改任何可以显示该信息的内容
你将负责所有正在发生的事情

有一种很好的内置方式来完成你想做的事情!使用从服务器位置下拉HTML文件。这真的很方便,因为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
  }

});
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>
{{person}
然后你会像这样使用它,而不是在你想要卡片的任何地方使用常规链接:

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

有一种很好的内置方式来完成您想要做的事情!使用从服务器位置下拉HTML文件。这真的很方便,因为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
  }

});
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>
{{person}
然后你会像这样使用它,而不是在你想要卡片的任何地方使用常规链接:

<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>");
{{person.actor.name}
{{person.actor.age}
");
用法



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

我建议使用一个包含锚定和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>");
{{person.actor.name}
{{person.actor.age}
");
用法



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

谢谢Seth!我不知道那个服务,很高兴知道。我需要将数据传递给模板(人员姓名等)-我似乎无法使用$templateRequest为模板设置数据上下文,或者我遗漏了什么?如果您想走这条路,您可以做什么(尽管您似乎已经找到了更好的方法),这是:您可以从
$templatereRequest
调用中对HTML使用,并将其注入DOM。那么,维奥拉!你已经从Angular对模板的解释中得到了HTML。很好,我喜欢它!非常感谢。但愿我能接受两个答案;)这是伟大的未来记住tho。谢谢Seth!我不知道那个服务,很高兴知道。我需要将数据传递给模板(人员姓名等)-我似乎无法使用$templateRequest为模板设置数据上下文,或者我遗漏了什么?如果您想走这条路,您可以做什么(尽管您似乎已经找到了更好的方法),这是:您可以从
$templatereRequest
调用中对HTML使用,并将其注入DOM。那么,维奥拉!你已经从Angular对模板的解释中得到了HTML。很好,我喜欢它!非常感谢。但愿我能接受两个答案;)这是伟大的记住为未来tho。想到这个方法后,我张贴的问题,我认为这是最有意义的。谢谢你的帮助!在我发布问题后就想到了这种方法,我认为这是最有意义的。谢谢你的帮助!除了可重用性之外,还有什么特别的原因让你想加载一个单独的HTML文件吗?HTML将变得更加复杂,因此,在指令中作为一个单独的文件而不是字符串来管理和维护更容易。除了可重用性之外,是否有特定的原因让您想加载一个单独的HTML文件?HTML将更加复杂,因此作为一个单独的文件而不是指令中的字符串来管理和维护更容易。