带有编译函数和ng-show的角度对话框指令不起作用
Angular dialog directive with compile function and ng-show does not work
受本文启发,我创建了一个对话框指令。但我想更灵活一点(例如,不要为每个对话框手动在控制器中创建新的变量/函数。我还想在对话框中没有范围,因为对话框中的其他角度组件不会像不在对话框中那样工作。
所以我想到了这个:
angular.module('directives.dialog', [])
.directive('modalDialog', function() {
return {
restrict: 'E',
replace: true,
transclude: true,
compile: function(element, attrs) {
var html = "<div class='ng-modal' ng-show='" + attrs.dialogid + "'><div class='ng-modal-overlay' ng-click='hideModal" + attrs.dialogid + "()'></div><div class='ng-modal-dialog' ng-style='dialogStyle'> <div class='ng-modal-close' ng-click='hideModal" + attrs.dialogid + "()'>X</div><div class='ng-modal-dialog-content' ng-transclude></div></div></div>"
var newElem = $(html);
element.replaceWith(newElem);
return function(scope, element, attrs) {
//link function
scope[attrs.dialogid] = false; //don't show in the beginning
scope['hideModal'+attrs.dialogid] = function() {
scope[attrs.dialogid] = false;
};
}
}
};
});
用法如下:
<button ng-click="toggleModal('myDialog')">Play weather god</button>
<modal-dialog dialogId='myDialog'>
<p>Some dialog content<p>
Other components..
<div ng-bind="tempValue"></div>
</modal-dialog>
toggleModal
在我的控制器中非常简单:
$scope.toggleModal = function(id) {
$scope[id] = !$scope[id];
};
我的问题是ng-show
没有效果,即使dialogId是通过链接函数在作用域中设置的(切换也可以,但正如我所说,它没有效果)。此外,动态生成的隐藏函数也在作用域中。
我有一种感觉,这种方法普遍存在一些问题。你能给出错误可能在哪里或如何做得更好的提示吗?
您需要编译html标记,以便使angular指令生效。
代码中:
您需要首先注入$compile服务:
.directive('modalDialog', function($compile) {...});
然后,您可以使用它来编译这样的标记:
var html = "<div ... ng-show='" + attrs.dialogid + "'> ..."
var newScope = scope.$new();
var newElem = $compile(html)(newScope);
element.replaceWith(newElem);
您可以使用newScope属性将任何变量传递给已编译的标记。例如
var newScope = scope.$new();
newScope.prop1 = 'test';
可以使用"prop1"在模板内部访问。
相关文章:
- 着色引导框对话框
- 文本框不是从Javascript/Asp.net中的对话框中打印出来的
- CKeditor:更改对话框中的默认选择选项
- 搜索api在mac上显示对话框
- 使用密码对话框Javascript请求帮助
- CKEditor v4:自制插件中对话框的动态标题
- 删除确认对话框在第一次单击时不起作用
- 使用jquery对话框中的箭头键
- 获取打开jquery对话框的button的id
- 是否可以用JavaScript显示等效的文件夹对话框
- 我怎么能让jQuery对话框表现得像Javascript警报
- 如何在页面重新加载时显示jquery ui对话框
- 打开相对于鼠标位置的CSS3/HTML5模式对话框
- javascript确认对话框有时会不断出现
- 如何为javascript方法放入jquery确认对话框
- 在角度材料 md 对话框中使用带有所需 ^form 的指令
- 模态对话框与指令在角度,范围问题
- 带有编译函数和ng-show的角度对话框指令不起作用
- 如何创建AngularJS指令以在按下回车按钮时提交jquery对话框
- 按钮类型上的确认对话框指令=“提交”;——AngularJS