AngularJS指令在断点处替换html,不会重置为原始元素
AngularJS directive replaces html at breakpoint, won't reset to original element
我创建了一个Angular指令,允许我指定一个引导断点,并在该断点处切换到新的html。我使用一个resize函数来检查是否在调整窗口大小时切换出文本。当我从原始html开始,并调整到断点时,该指令可以工作。一旦html被交换,如果我在另一个方向调整大小,我不能让html切换回原来的元素html。
指令:
;(function(ng, undefined){
'use strict';
ng.module('common.directives')
.directive('textSwap', textSwap);
textSwap.$inject = ['$window', '$compile'];
function textSwap($window, $compile) {
return {
restrict: "E",
scope: {
breakpoint: '=',
newHtml: '='
},
transclue: true,
link: function(scope, element, attrs, fn) {
var originalElement = element;
var keys = {
xs: 480,
sm: 768,
md: 992,
lg: 1200
};
checkAndReplaceContent();
function checkAndReplaceContent() {
if ($window.innerWidth < keys[scope.breakpoint]) {
element.replaceWith($compile(scope.newHtml)(scope));
} else {
element.replaceWith(originalElement.context.innerHTML);
}
}
ng.element($window).on('resize', function() {
checkAndReplaceContent();
});
}
};
}
})(angular);
HTML:
<button class="btn btn-info grid-option-button pull-right"
id="rxsignal-filter-button"
popover-append-to-body="true" popover-trigger="mouseenter"
popover-placement="top" popover="Open advanced filter options"
ng-click="searchFilter({})">
<text-swap breakpoint="'sm'" new-html="'<i class=''fa fa-filter''></i>'">
{{ btnText }}
</text-swap>
</button>
<button class="btn btn-danger grid-option-button pull-right"
popover-append-to-body="true" popover-trigger="mouseenter"
popover-placement="top" popover="Clear advanced filter options"
ng-class="{disable: model.empty}" ng-click="resetModel()">
<text-swap breakpoint="'sm'" new-html="'<i class=''fa fa-times''></i>'">
Clear Filter
</text-swap>
</button>
我最终只是传递原始文本作为指令绑定,它似乎工作。
指令:
;(function(ng, undefined){
'use strict';
ng.module('common.directives')
.directive('textSwap', textSwap);
textSwap.$inject = ['$window', '$compile', '$debounce'];
function textSwap($window, $compile, $debounce) {
return {
restrict: "E",
scope: {
breakpoint: '=',
newHtml: '=',
originalHtml: '='
},
transclue: true,
template: '<span ng-bind-html="compiledHtml"></span>',
link: function(scope, element, attrs, fn) {
var keys = {
xs: 480,
sm: 768,
md: 992,
lg: 1200
};
checkAndReplaceContent();
function checkAndReplaceContent() {
if ($window.innerWidth < keys[scope.breakpoint]) {
scope.compiledHtml = scope.newHtml;
} else {
scope.compiledHtml = scope.originalHtml;
}
}
ng.element($window).on('resize', function() {
$debounce(checkAndReplaceContent, 1000);
});
}
};
}
})(angular);
HTML
<button class="btn btn-info grid-option-button pull-right"
id="rxsignal-filter-button"
popover-append-to-body="true" popover-trigger="mouseenter"
popover-placement="top" popover="Open advanced filter options"
ng-click="searchFilter({})">
<text-swap breakpoint="'sm'" new-html="'<i class=''fa fa-filter''></i>'" original-html="btnText" />
</button>
<button class="btn btn-danger grid-option-button pull-right"
popover-append-to-body="true" popover-trigger="mouseenter"
popover-placement="top" popover="Clear advanced filter options"
ng-class="{disable: model.empty}" ng-click="resetModel()">
<text-swap breakpoint="'sm'" new-html="'<i class=''fa fa-times''></i>'" original-html="'Clear Filter'" />
</button>
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- JQuery:使用clone()生成的元素不采用原始的事件属性
- 如何显示替换为后的原始元素
- jQuery's clone()函数扰乱了原始元素'的属性
- 将jQuery$(this)转换为原始元素
- React警告:ReactMount:根元素已从其原始容器中删除.新容器:[object HTMLDivElement]
- 正在将DOM元素转换为原始HTML字符串
- 移动|克隆元素并从原始位置移除
- 滚动后,检测元素何时返回到原始位置
- 从第三方原始javascript控制Angular JS元素
- html5可拖动隐藏原始元素
- AngularJS指令,该指令使用模板中的原始元素类型
- 使用 .on 获取原始元素
- 如何获取固定元素的“原始”偏移量().top
- 我可以在 ReactJS 中排除原始元素的子元素吗?
- 独立于原始元素复制元素
- 确定元素是否由 JS 添加,还是原始 HTML 文档 *OR* 检测脚本何时通过 InnerHTML 更新节点
- 如何从事件中获取原始元素
- 获取聚合物元素的原始 HTML 代码
- 旋转元素而不返回到原始状态