AngularJS 弹出窗口绑定到控制器变量
AngularJS popover bind to controller variable
我正在尝试创建一个弹出窗口并将内容直接从控制器加载到其中。
我可以使用此 answer 中的指令成功地将 flag
绑定到工具提示中,但弹出窗口一直显示 flag
的初始值,即使我更改 [=12] =]的值与第二个按钮。
The point is that I wish the content of the popover to change
dinamically along with the variable in the controller.
How can I make the trick?
指令如下:
var app = angular.module('plunker', []);
app.directive('popover', function($compile, $timeout){
return {
restrict: 'A',
link:function(scope, el, attrs){
var content = attrs.content;
var settings = scope.$eval(attrs.popover);
var elm = angular.element('<div />');
elm.append(attrs.content);
$compile(elm)(scope);
$timeout(function() {
el.removeAttr('popover').attr('data-content',elm.html());
el.popover(settings);
});
}
}
来了 plunker
第二步
我希望我可以使用该指令将弹出窗口的容器设置为 <body>
,这样我就可以使弹出窗口的宽度为页面的 1/3。
关于更新正文值的第一个问题 - 您没有绑定到范围变量,而是读取分配给 var content = attrs.content;
中的元素属性的值
由于您已经在使用 bootstrap popover,请查看 angular-ui bootstrap,他们已经实现了 popover 指令。他们支持使用 popover-template
属性的自定义模板。
问题是popover最后的html不是你编译的那个,只是复制过来的。
您可以改为将 content
选项设置为编译元素本身:
// remove the attribute so the popover will look at the content option value
el.removeAttr('data-content');
settings.content = elm;
el.popover(settings);
看到这个plunker。
这里真正的问题是 popover-template
指令使用了一个模板,它的路由作为字符串存储在 $scope
变量中(正如@kpentchev 在另一个答案的评论中所建议的那样)仅适用于 angular-bootstrap
version 0.13.0.
那个版本是 not available in npm,所以在我使用 Bower 手动更新它之后,我能够正确使用我的自定义弹出窗口。
我正在尝试创建一个弹出窗口并将内容直接从控制器加载到其中。
我可以使用此 answer 中的指令成功地将 flag
绑定到工具提示中,但弹出窗口一直显示 flag
的初始值,即使我更改 [=12] =]的值与第二个按钮。
The point is that I wish the content of the popover to change dinamically along with the variable in the controller.
How can I make the trick?
指令如下:
var app = angular.module('plunker', []);
app.directive('popover', function($compile, $timeout){
return {
restrict: 'A',
link:function(scope, el, attrs){
var content = attrs.content;
var settings = scope.$eval(attrs.popover);
var elm = angular.element('<div />');
elm.append(attrs.content);
$compile(elm)(scope);
$timeout(function() {
el.removeAttr('popover').attr('data-content',elm.html());
el.popover(settings);
});
}
}
来了 plunker
第二步
我希望我可以使用该指令将弹出窗口的容器设置为 <body>
,这样我就可以使弹出窗口的宽度为页面的 1/3。
关于更新正文值的第一个问题 - 您没有绑定到范围变量,而是读取分配给 var content = attrs.content;
由于您已经在使用 bootstrap popover,请查看 angular-ui bootstrap,他们已经实现了 popover 指令。他们支持使用 popover-template
属性的自定义模板。
问题是popover最后的html不是你编译的那个,只是复制过来的。
您可以改为将 content
选项设置为编译元素本身:
// remove the attribute so the popover will look at the content option value
el.removeAttr('data-content');
settings.content = elm;
el.popover(settings);
看到这个plunker。
这里真正的问题是 popover-template
指令使用了一个模板,它的路由作为字符串存储在 $scope
变量中(正如@kpentchev 在另一个答案的评论中所建议的那样)仅适用于 angular-bootstrap
version 0.13.0.
那个版本是 not available in npm,所以在我使用 Bower 手动更新它之后,我能够正确使用我的自定义弹出窗口。