包装 AngularStrap Popover
Wrapping AngularStrap Popover
我正在尝试使用自定义指令包装 angular 表带的弹出窗口。
弹出窗口应该能够使用由使用我的指令的用户提供的自定义模板,并且该模板应该能够使用控制器的范围。
对于我发现的范围部分,我可以将控制器的范围传递给 $popover 服务。
var myPopover = $popover(element, {
title: 'My Title',
placement : 'top',
contentTemplate: 'example.html',
html: true,
trigger: 'manual',
autoClose: true,
scope: scope
});
这是一个笨蛋:http://plnkr.co/edit/9vTzR0fKcjOlP0bNjZUf?p=preview
有人能解释一下为什么这两个按钮打开同一个弹出窗口吗?我应该隔离范围吗?如果是,那么我如何使用原始控制器的范围来绑定变量?
谢谢
这种情况下的问题是每次使用 customPopover 时它都会设置 scope.showPopover。由于本例中的两个实例都共享相同的范围,您在第一个 scope.showPopover 被写入的情况下,然后第二次使用该指令并且 scope.showPopover 被一个指向的版本覆盖到第二个元素。
解决这个问题其实很简单。由于您可以访问 link 函数中的元素,您实际上可以在那里添加一个点击处理程序,而不必担心处理这样的范围冲突。这也使您的指令更加独立。这是 an example,它使用 element.on
而不是遍历范围并使用 ngClick。
Is anybody able to explain me why the two buttons are opening the same popover?
因为两个 customPopover
指令共享相同的范围。您想指示指令为单个指令创建隔离范围。
添加scope: true
:
app.directive("customPopover", ["$popover", "$compile", function($popover, $compile) {
return {
scope: true,
restrict: "A",
link: function(scope, element, attrs) {
var myPopover = $popover(element, {
title: 'My Title',
placement : 'top',
contentTemplate: 'example.html',
html: true,
trigger: 'manual',
autoClose: true,
scope: scope
});
scope.showPopover = function() {
myPopover.show();
}
}
}
}]);
我正在尝试使用自定义指令包装 angular 表带的弹出窗口。
弹出窗口应该能够使用由使用我的指令的用户提供的自定义模板,并且该模板应该能够使用控制器的范围。
对于我发现的范围部分,我可以将控制器的范围传递给 $popover 服务。
var myPopover = $popover(element, {
title: 'My Title',
placement : 'top',
contentTemplate: 'example.html',
html: true,
trigger: 'manual',
autoClose: true,
scope: scope
});
这是一个笨蛋:http://plnkr.co/edit/9vTzR0fKcjOlP0bNjZUf?p=preview
有人能解释一下为什么这两个按钮打开同一个弹出窗口吗?我应该隔离范围吗?如果是,那么我如何使用原始控制器的范围来绑定变量?
谢谢
这种情况下的问题是每次使用 customPopover 时它都会设置 scope.showPopover。由于本例中的两个实例都共享相同的范围,您在第一个 scope.showPopover 被写入的情况下,然后第二次使用该指令并且 scope.showPopover 被一个指向的版本覆盖到第二个元素。
解决这个问题其实很简单。由于您可以访问 link 函数中的元素,您实际上可以在那里添加一个点击处理程序,而不必担心处理这样的范围冲突。这也使您的指令更加独立。这是 an example,它使用 element.on
而不是遍历范围并使用 ngClick。
Is anybody able to explain me why the two buttons are opening the same popover?
因为两个 customPopover
指令共享相同的范围。您想指示指令为单个指令创建隔离范围。
添加scope: true
:
app.directive("customPopover", ["$popover", "$compile", function($popover, $compile) {
return {
scope: true,
restrict: "A",
link: function(scope, element, attrs) {
var myPopover = $popover(element, {
title: 'My Title',
placement : 'top',
contentTemplate: 'example.html',
html: true,
trigger: 'manual',
autoClose: true,
scope: scope
});
scope.showPopover = function() {
myPopover.show();
}
}
}
}]);