bootstrap 弹出窗口在 ServiceNow 小部件中不起作用
bootstrap popover not working in ServiceNow widget
我在 ServiceNow 的 Istanbul 版本中工作,运行 遇到了一些将 bootstrap 弹出窗口合并到我的一个小部件中的问题。该小部件当前具有 fullCalendar 依赖项并呈现包含重要日期的日历。我想合并一个弹出窗口,用户可以单击它来获取更多信息,但它似乎无法正常工作。我已经使用以下 jquery:
初始化了弹出框
<script>
$(document).ready(function(){
$('[data-toggle="popover"]').popover();
$('.popover-dismiss').popover({
trigger: 'focus'
})
});
</script>
我的 HTML 看起来像这样:
<span class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
<li class="rowflex" style="list-style: none;">
<div class="colflex">
<strong><i class="fa fa-calendar" aria-hidden="true"></i> {{item.date}}</strong>
<p>{{item.date_name}}</p>
</div>
<a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test"/>
</li>
</span>
目前,当我将鼠标悬停在问号字形上时,我可以看到 "test",但是当我点击它时,没有任何反应。
当我查看控制台时,收到此错误消息,但我不熟悉如何修复它:
有什么建议吗?
谢谢!
一般来说,对于服务门户,您希望避免直接 jQuery 调用,而是使用 Angular。您看到的错误可能就是由此产生的。
您需要查看 BootstrapUI for Bootstrap + Angular 以获得您可以在此处使用的一些 API 的参考,但可能仍然会被击中或失败-小姐。
利用 $uibModal
服务打开您的模式。
我用过的一个很好的资源是 https://serviceportal.io, in particular for your case https://serviceportal.io/modal-windows-service-portal/。
我已经在我们的伊斯坦布尔实例上测试了他们的示例并且它有效。总结一下 post,以下是您可能想针对您的情况尝试的方法。
HTML模板
<span class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
<li class="rowflex" style="list-style: none;">
<div class="colflex">
<strong><i class="fa fa-calendar" aria-hidden="true"></i> {{item.date}}</strong>
<p>{{item.date_name}}</p>
</div>
<a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test" ng-click="c.openModal()" />
</li>
</span>
<script type="text/ng-template" id="modalTemplate">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">Modal Window</h4>
</div>
<div class="panel-body wrapper-xl">
Hello
</div>
<div class="panel-footer text-right">
<button class="btn btn-primary" ng-click="c.closeModal()">${Close Modal}</button>
</div>
</div>
</script>
客户端脚本
function($uibModal, $scope) {
var c = this;
c.openModal = function() {
c.modalInstance = $uibModal.open({
templateUrl: 'modalTemplate',
scope: $scope
});
}
c.closeModal = function() {
c.modalInstance.close();
}
}
经过多次尝试,我找到了解决方案。您需要使用 Timeout.
在您的 小部件 中使用以下选项之一..
选项 #1 - 客户端脚本(客户端控制器)
function ($scope, spUtil, $sce, $rootScope, $timeout) {
$(document).ready(function(){
setTimeout(function(){
$('[data-toggle="popover"]').popover();
},500);
});
}
选项 #2 - Link 函数
function() {
$(document).ready(function(){
setTimeout(function(){
$('[data-toggle="popover"]').popover();
},500);
});
}
样本:
Popover sample
我在 ServiceNow 的 Istanbul 版本中工作,运行 遇到了一些将 bootstrap 弹出窗口合并到我的一个小部件中的问题。该小部件当前具有 fullCalendar 依赖项并呈现包含重要日期的日历。我想合并一个弹出窗口,用户可以单击它来获取更多信息,但它似乎无法正常工作。我已经使用以下 jquery:
初始化了弹出框<script>
$(document).ready(function(){
$('[data-toggle="popover"]').popover();
$('.popover-dismiss').popover({
trigger: 'focus'
})
});
</script>
我的 HTML 看起来像这样:
<span class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
<li class="rowflex" style="list-style: none;">
<div class="colflex">
<strong><i class="fa fa-calendar" aria-hidden="true"></i> {{item.date}}</strong>
<p>{{item.date_name}}</p>
</div>
<a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test"/>
</li>
</span>
目前,当我将鼠标悬停在问号字形上时,我可以看到 "test",但是当我点击它时,没有任何反应。
当我查看控制台时,收到此错误消息,但我不熟悉如何修复它:
有什么建议吗?
谢谢!
一般来说,对于服务门户,您希望避免直接 jQuery 调用,而是使用 Angular。您看到的错误可能就是由此产生的。
您需要查看 BootstrapUI for Bootstrap + Angular 以获得您可以在此处使用的一些 API 的参考,但可能仍然会被击中或失败-小姐。
利用 $uibModal
服务打开您的模式。
我用过的一个很好的资源是 https://serviceportal.io, in particular for your case https://serviceportal.io/modal-windows-service-portal/。
我已经在我们的伊斯坦布尔实例上测试了他们的示例并且它有效。总结一下 post,以下是您可能想针对您的情况尝试的方法。
HTML模板
<span class="list-group-item" ng-repeat="item in c.dates | orderBy:'date' track by $index" ng-if="item.displayList=='true' && item.futureDate">
<li class="rowflex" style="list-style: none;">
<div class="colflex">
<strong><i class="fa fa-calendar" aria-hidden="true"></i> {{item.date}}</strong>
<p>{{item.date_name}}</p>
</div>
<a tabindex="0" class="glyphicon glyphicon-question-sign" role="button" data-toggle="popover" data-placement="right" data-trigger="focus" title="test" data-content="test" ng-click="c.openModal()" />
</li>
</span>
<script type="text/ng-template" id="modalTemplate">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">Modal Window</h4>
</div>
<div class="panel-body wrapper-xl">
Hello
</div>
<div class="panel-footer text-right">
<button class="btn btn-primary" ng-click="c.closeModal()">${Close Modal}</button>
</div>
</div>
</script>
客户端脚本
function($uibModal, $scope) {
var c = this;
c.openModal = function() {
c.modalInstance = $uibModal.open({
templateUrl: 'modalTemplate',
scope: $scope
});
}
c.closeModal = function() {
c.modalInstance.close();
}
}
经过多次尝试,我找到了解决方案。您需要使用 Timeout.
在您的 小部件 中使用以下选项之一..
选项 #1 - 客户端脚本(客户端控制器)
function ($scope, spUtil, $sce, $rootScope, $timeout) {
$(document).ready(function(){
setTimeout(function(){
$('[data-toggle="popover"]').popover();
},500);
});
}
选项 #2 - Link 函数
function() {
$(document).ready(function(){
setTimeout(function(){
$('[data-toggle="popover"]').popover();
},500);
});
}
样本: Popover sample