Angular JS-点击按钮,从指令加载一个模板html
Angular JS - Load a template html from directive on click of a button
单击链接时,我正在尝试加载HTML模板。我制作了一个指令,其中包含加载HTML文件的templateUrl
。当点击一个链接时,我正在调用一个函数,该链接将一个带有自定义指令"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>
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);
my-customer.html
<p>DIV CONTENT</p>
这是我在这里测试这个代码的链接
这是因为如果您附加这样的内容,则angular不会绑定指令,
您需要$compile
服务来执行此操作,这将绑定针对您的$scope
的指令
所以像控制器,
.controller('Controller', ['$scope', '$compile', function($scope, $compile) {
$scope.showdiv = function(){
var compiledeHTML = $compile("<div my-Customer></div>")($scope);
$("#d").append(compiledeHTML);
};
}])
这是演示
或者这样做很好,
使用ng-if
从html、中创建或删除元素
试试这个代码
控制器,
....
$scope.anableCustomerDirective = false;
$scope.showdiv = function(){
$scope.anableCustomerDirective = true;
};
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>
建议
如果你的主要意图是在点击后放置html内容,那么你可以在这里使用ng-include
,它会更干净,不需要其他指令。
<div id="d">
<div ng-include="templateURL"></div>
</div>
$scope.showdiv = function(){
$scope.templateURL = 'my-customer.html';
};
查找DEMO
似乎指令只用于从中加载template
。我建议您使用ng-include
指令,然后使用
标记
<a href="#" ng-click="showDiv=true">show</a>
<div id="d"></div>
<div ng-include="showDiv ? 'my-customer.html': ''">
最常见的方法是使用$compile
。更多信息:在AngularJS 中动态添加指令
然后你的控制器可能看起来像这样:
angular.module('docsTemplateUrlDirective', [])
.controller('Controller', ['$scope', '$compile', function($scope, $compile) {
$scope.showdiv = function(){
var el = $compile( "<div my-customer></div>" )( $scope );
$('#d').append( el );
};
}]);
注意,指令调用应该是这样的:<div my-customer>
,而不是代码中的<div my-Customer></div>
。
当您使用append手动执行时,实际上不会运行$apply或$digest,因此指令不会运行,你能试着用ng show还是ng if。。。例如
<body ng-app="docsTemplateUrlDirective">
<div ng-controller="Controller">
<a href="#" ng-click="showdiv = true">show</a>
<div my-customer ng-if="showdiv"></div>
<div id="d"></div>
</div>
</body>
通过这种方式angular运行$apply,指令将被呈现。
相关文章:
- 使用javascript将动态表从一个html页面打印到另一个html页
- 如何将值传递到上一个html页面
- 一个html元素的克隆次数太多
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- 如何在另一个html文件的框架中包含图像
- 按下一个HTML按钮,该按钮使用一个功能在同一个新窗口中打开URL
- 我可以共享一个HTML播放器吗
- 如何在一个html页面上使用js进行2次乘法运算
- 访问下一个html页面的静态4位密码
- 如何在JavaScript中将值从一个html页面传递到另一个页面
- 重定向到Angular JS中的另一个HTML页面
- 使用JavaScript打开另一个html页面时传递变量
- 一个html/javascript'小工具'知道用户何时单击了小部件外的任意位置
- 当源文件夹中有多个jade文件时,gulp-ejade只构建一个HTML文件
- JSON编码一个HTML列表——所有子项都显示在所有父项上
- 创建一个HTML文件,该文件使用DOM在用户每次单击按钮时交换两段内容
- 如何在另一个 html 标签内选择 web 元素硒 Web 驱动程序与 html 源
- 创建一个html表单并使用javascript访问中的python脚本
- 构建一个HTML小部件来嵌入付费内容-如何确保与后端的通信安全
- 在我的php模型中用javascript更改一个html类