$uibModal从windowTemplate调用作用域函数
$uibModal call scope function from windowTemplate
我有一个windowTemplate来包装我的模态。我想要实现的是用自定义功能扩展包装器。我在包装中添加了两个新按钮,一个是关闭按钮,另一个是帮助按钮。关闭按钮使用内置的关闭功能,而帮助应该使用我添加到范围中的功能。
1:windowTemplate(我们将模态放入这个包装器中)
<div modal-render="{{$isRendered}}" tabindex="-1" role="dialog" class="modal"
modal-animation-class="fade"
modal-in-class="in" ng-click="($event.target===$event.currentTarget) && close($event)"
ng-style="{'z-index': 1050 + index*10, display: 'block'}">
<div class="modal-dialog {{size ? 'modal-' + size : ''}}">
<div class="modal-content">
<!-- This is one of the added buttons -> close -->
<aside><a class="modal-close" ng-click="close($event)"></a></aside>
<div class="modal-content-body" modal-transclude></div>
<!-- this is another added item, a pager, works just great -->
<aside class="modal-pager">#{{$parent.modalId}}</aside>
<!-- this is the help button, won't call openHelp :( -->
<aside class="modal-help"><a ng-click="$parent.openHelp($parent.modalId, $event)"></a></aside>
</div>
</div>
</div>
2:在通用模式工厂内
const scope = Object.assign(this.$rootScope.$new(), descriptor.scope || {}, { openHelp: this.openHelp });
let modalInstance = this.$modal.open({
...props,
...descriptor,
scope, // the scope here will contain the modalId and the function (openHelp) I'd like to call from the wrapper
resolve: {
...params
}
});
问题是我无法从模板中调用函数。此外,如果我调试我的代码,我会调试ui引导打开方法,它会从我的下推作用域创建一个新的作用域,我可以很好地调用我的函数。如果我调用modalOptions$parent.openHelp(),然后我得到了所需的功能。modalOptions是ui引导程序的内部组件$需要parent,因为(在ui bootstrap tpls.js中)var modalScope = (modalOptions.scope || $rootScope).$new();
。有人能帮我吗?:)
回答我自己的问题
Blah我发现了为什么这不起作用。所以TL;博士
<aside class="modal-help"><a ng-click="$parent.openHelp($parent.modalId, $event)"></a></aside>
线路是原因。更准确地说,我将样式规则附加到了模态帮助类中,因为我不小心将该类放在了side标记上,而不是放在了锚点标签上,所以锚点没有维度(没有宽度、没有高度、没有值),所以我怀疑当我点击图标时,事件的目标是side标记,它从那里冒了出来。基本上,我从来没有用点击处理程序点击锚标记。叹气。只需将模态帮助类放在标签上即可。
与此同时,我想出了一个仍然过于棘手的替代解决方案:D
- 为包装器上最外层的容器添加一个"数据模式标识符"属性,例如为其分配
{{$parent.modalId}}
值,以确保您能够查询它 - 在工厂中订阅实例
modalInstance.rendered.then(...)
的渲染事件 - 当呈现模态时,搜索包装器的DOM元素:
document.querySelector(`div[data-modal-identifier="${scope.modalId}]"`);
- 如果事件源是我们的帮助图标,则使用事件委派订阅click事件并调用openHelp函数
- 监视函数从服务返回不起作用,但作用域函数起作用
- AngularJS:如何与其他控制器共享作用域函数和变量
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 嵌套的Angular指令触发父对象上的作用域函数
- $uibModal从windowTemplate调用作用域函数
- 角度:创建可以调用作用域函数的自定义指令
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 为什么我的作用域函数没有获取从模型传递的数据
- AngularJS在ngClass更改后执行作用域函数
- 控制台.log在 AngularJS 中执行作用域函数
- JavaScript 不作用域函数参数
- 本地作用域函数原型覆盖
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 达到 10 次摘要迭代,中止(作用域函数问题)
- AngularJS在指令中附加作用域函数
- Javascript eval() for Json 字符串注入了全局作用域函数
- JavaScript本地作用域函数
- 从指令调用父作用域函数
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- Javascript:从类内部创建全局作用域函数