Angular JS - 单击按钮从指令加载模板html

Vik*_*don 22 html javascript jquery angularjs angularjs-directive

我正在尝试在单击链接时加载HTML模板.我做了一个包含templateUrl加载HTML文件的指令.我在单击一个链接时调用一个函数,该链接将带有我们的自定义指令"myCustomer"的div附加到已经在index.html中的div.到目前为止我所做的一切如下所示,但它不起作用.

的index.html

    <!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example - example-example12-production</title>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.1/angular.min.js"></script>
  <script src="script.js"></script>
</head>
<body ng-app="docsTemplateUrlDirective">
  <div ng-controller="Controller">
  <a href="#" ng-click="showdiv()">show</a>
  <div id="d"></div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

的script.js

(function(angular) {
  'use strict';
angular.module('docsTemplateUrlDirective', [])
  .controller('Controller', ['$scope', function($scope) {

    $scope.showdiv = function(){
      $("#d").append("<div my-Customer></div>");
    };
  }])
  .directive('myCustomer', function() {
    return {
      templateUrl: 'my-customer.html'
    };
  });
})(window.angular);
Run Code Online (Sandbox Code Playgroud)

我-customer.html

<p>DIV CONTENT</p>
Run Code Online (Sandbox Code Playgroud)

这是我在这里测试此代码的链接

K.T*_*ess 37

这是因为如果你附加这样的内容,angular不会绑定指令,

你需要$compile服务这样做,这将绑定指令与你的$scope

所以控制器像,

.controller('Controller', ['$scope', '$compile', function($scope, $compile)     {

    $scope.showdiv = function(){
      var compiledeHTML = $compile("<div my-Customer></div>")($scope);
      $("#d").append(compiledeHTML);
    };

}])
Run Code Online (Sandbox Code Playgroud)

这是DEMO


或者这样做好,

用于ng-if从html创建或删除元素,

试试这段代码

控制器,

....
$scope.anableCustomerDirective = false;
$scope.showdiv = function(){
  $scope.anableCustomerDirective = true;
};
Run Code Online (Sandbox Code Playgroud)

HTML

<body ng-app="docsTemplateUrlDirective">
  <div ng-controller="Controller">
      <a href="#" ng-click="showdiv()">show</a>
      <div id="d">
          <div my-Customer ng-if='anableCustomerDirective'></div>
      </div>
 </div>
</body>
Run Code Online (Sandbox Code Playgroud)

建议

如果你的主要目的是在点击后放置一个html内容,那么你可以ng-include在这里使用它会更清洁,不需要另一个指令.

<div id="d">        
    <div ng-include="templateURL"></div>
 </div>

 $scope.showdiv = function(){
      $scope.templateURL = 'my-customer.html';
 };
Run Code Online (Sandbox Code Playgroud)

找到DEMO


Pan*_*kar 8

似乎指令只是意味着template从它加载.我建议你使用ng-include指令

标记

<a href="#" ng-click="showDiv=true">show</a>
<div id="d"></div>
<div ng-include="showDiv ? 'my-customer.html': ''">
Run Code Online (Sandbox Code Playgroud)