angular 中的动态模板与 qtip
Dynamic template in angular with qtip
为了显示一些用户信息,我正在使用捕获点击事件的指令来显示 qTip tooltip. As I am already using angular, to render the HTML I am using $compile 以呈现 HTML。
.directive('myDirective', function ($compile, $timeout) {
return {
restrict: 'AE',
link: function (scope, element, attrs) {
// Open qTip popup
element.qtip({
content: {
ajax: {
url: '/myurl',
type: 'GET',
dataType: 'json',
success: function (data, status) {
// Contact full name
scope.FullName = data.contact.Forename + ' ' + data.contact.Surname;
var myelement = angular.element('<p>[[ FullName ]]</p>');
var compiled = $compile(myelement)(scope);
this.set('content.text', compiled)
}
}
},
show: 'click',
style: {
classes: 'qtip-bootstrap'
},
hide: {
event: 'unfocus'
}
});
}
};
});
问题是 HTML 只渲染了几次,而在其他情况下我可以看到 angular 标签出现。似乎编译器输出没有及时呈现。为了解决,我找到了一个使用超时的解决方案,如下面的代码所示。
...
success: function (data, status) {
// Contact full name
scope.FullName = data.contact.Forename + ' ' + data.contact.Surname;
var myelement = angular.element('<p>[[ FullName ]]</p>');
var compiled = $compile(myelement)(scope);
$timeout(this.set('content.text', compiled), 100); // delay 100 ms
}
...
我的问题是我觉得这个解决方案不是很有效,我想知道是否有更好的替代方法。任何帮助将不胜感激。
$timeout(this.set('content.text', compiled), 100);
你的超时函数是错误的,因为它会立即执行。但它之所以有效,是因为缺少的部分是启动 angular digest
进程来更新 GUI,因为 qTip 运行 在 angular 生命周期之外。 $timeout
将隐式调用 digest
函数。
试试这个:
this.set('content.text', compiled)l
scope.$digest();
超时函数的正确实现:
var that = this;
$timeout(function() {
that.set('content.text', compiled);
}, 100);
为了显示一些用户信息,我正在使用捕获点击事件的指令来显示 qTip tooltip. As I am already using angular, to render the HTML I am using $compile 以呈现 HTML。
.directive('myDirective', function ($compile, $timeout) {
return {
restrict: 'AE',
link: function (scope, element, attrs) {
// Open qTip popup
element.qtip({
content: {
ajax: {
url: '/myurl',
type: 'GET',
dataType: 'json',
success: function (data, status) {
// Contact full name
scope.FullName = data.contact.Forename + ' ' + data.contact.Surname;
var myelement = angular.element('<p>[[ FullName ]]</p>');
var compiled = $compile(myelement)(scope);
this.set('content.text', compiled)
}
}
},
show: 'click',
style: {
classes: 'qtip-bootstrap'
},
hide: {
event: 'unfocus'
}
});
}
};
});
问题是 HTML 只渲染了几次,而在其他情况下我可以看到 angular 标签出现。似乎编译器输出没有及时呈现。为了解决,我找到了一个使用超时的解决方案,如下面的代码所示。
...
success: function (data, status) {
// Contact full name
scope.FullName = data.contact.Forename + ' ' + data.contact.Surname;
var myelement = angular.element('<p>[[ FullName ]]</p>');
var compiled = $compile(myelement)(scope);
$timeout(this.set('content.text', compiled), 100); // delay 100 ms
}
...
我的问题是我觉得这个解决方案不是很有效,我想知道是否有更好的替代方法。任何帮助将不胜感激。
$timeout(this.set('content.text', compiled), 100);
你的超时函数是错误的,因为它会立即执行。但它之所以有效,是因为缺少的部分是启动 angular digest
进程来更新 GUI,因为 qTip 运行 在 angular 生命周期之外。 $timeout
将隐式调用 digest
函数。
试试这个:
this.set('content.text', compiled)l
scope.$digest();
超时函数的正确实现:
var that = this;
$timeout(function() {
that.set('content.text', compiled);
}, 100);