AngularJS popover未显示内容:渲染太早
AngularJS popover not showing content: Rendered Too Early
在我的AngularJS控制器中,我调用我的数据服务方法,该方法进行$http
调用以获取页面显示所需的数据。
appDataService.getById()
.success(function(document) {
vm.document = document;
}
.error(function(e)){});
一切都显示得很好,当切换/点击时,我的大多数弹出窗口都能正确显示它们的内容。然而,我对其中一个弹出窗口有问题。
<button popover-directive
popover-placement="auto"
popover-content="{{ vm.document.content }}"
popover-label="Click to View Text "
class="btn btn-info btn-xs">
</button>
我检查了HTML,可以确认popover-content
被赋予了正确的字符串值。然而,当我点击它时,预期的触发弹出行为并没有发生,
即没有出现新的CCD_ 3。
如果给popover-content
一个直接值,如popover-content="testing"
,则popover
工作正常,并在单击时显示内容。
我强烈怀疑这是由于我的数据获取的异步行为造成的;我的数据没有及时返回以便正确初始化我的popover
。
很明显,我的popover指令正在正常运行,我不认为问题出在它身上,但为了全面了解情况,我提供了我的popoverdirective如下:
function popoverDirective ($document) {
return {
restrict: 'A',
template: '<span>{{label}}</span>',
link: function (scope, element, attrs) {
scope.label = attrs.popoverLabel;
$(element).popover({
trigger: 'click',
html: true,
content: attrs.popoverContent,
placement: attrs.popoverPlacement
});
}
};
}
有什么解决方案吗?非常感谢。
由于指令属性是插值的,请考虑将其更改为:
<button popover-directive
popover-placement="auto"
popover-content="{{vm.document.content}}" <!-- Change at this line -->
popover-label="Click to View Text "
class="btn btn-info btn-xs">
</button>
此外,由于vm.document.content
是通过promise解决的,因此您需要注册一个观察器:
function popoverDirective ($document) {
return {
restrict: 'A',
template: '<span>{{label}}</span>',
link: function (scope, element, attrs) {
function initPopover() {
scope.label = attrs.popoverLabel;
// Make sure to remove any popover before hand (please confirm the method)
$(element).popover("destroy");
$(element).popover({
trigger: 'click',
html: true,
content: attrs.popoverContent,
placement: attrs.popoverPlacement
});
}
attrs.$observe("popoverContent", initPopover);
}
};
}
注意如果使用Bootstrap,请删除bootstrap.min.js
,也可以删除jQuery。Angular UI团队已经移植了Bootstrap Javascript来支持Angular。看看这个http://angular-ui.github.io/bootstrap
您是否考虑过使用promise而不是直接从服务返回?这里的目标是,函数是否立即返回并不重要,因为当异步值可用时,promise将更新为包含该值。
您可以更新服务本身以使用promise,如果成功则使用值解析promise,或者如果出现错误则拒绝它。在该函数的接收端,当promise以某种方式得到解决时,作用域上的值将更新。
- 加载侦听器上的函数触发得太早
- AngularJS popover未显示内容:渲染太早
- 函数启动太早
- 咽表结束得太早了
- Node js async.series无法使用Express应用程序--响应发生得太早
- $.当承诺解决得太早时
- 过渡开始得太早,而 css 样式尚未完全应用
- 对于 IE 中的 ajax 内容,加载触发时间太早
- Moment.js fromNow() 太早了几秒钟
- Js 数组长度增加得太早
- JavaScript 在命令运行太早时打开新窗口而不是选项卡
- Meteor FlowRouter触发器输入触发太早
- Javascript函数调用得太早
- 太早从数组中删除元素
- Android的onOrientationChange在朝向完成之前触发(太早了)
- 聚合物自定义元素观察者开火太早
- QlikView运行BodyOnLoadFunctionNames回调太早-为什么?
- Angular广播初始化得太早了
- Jquery事件处理程序-新处理程序触发太早
- gulp-watch和liverload,重载太早