我有一个带有 3 个标签的标签集:
<tabset>
<tab heading="Tab1" active="activeTab1">
...
</tab>
<tab heading="Tab2" active="activeTab2" select="tabTab2()">
...
<div id="newMap" class="col-sm-12" style="height: 400px;"></div>
...
</tab>
<tab heading="Tab3" active="activeTab3" select="tabTab3()">
...
</tab>
</tabset>
在控制器上:
$scope.tabTab2 = function()
{
console.log("tab2");
var map = new google.maps.Map(document.getElementById("newMap"), mapOptions);
}
$scope.tabTab3 = function()
{
console.log("tab3");
}
所以,我有两个与此代码相关的问题。
第一:如果activeTab2
设置为true
,该函数tabTab2
将运行两次(Tab3 相同)。这是为什么?如果我然后选择 tab1 并返回到 tab2 它将只运行一次......
第二:我试图在 div 中使用 google.mapsnewMap
但它抛出错误Cannot read property 'offsetWidth' of null
并且null
元素是document.getElementById("newMap")
. 再说一遍,这是为什么呢?
如果我设置activeTab2
为true,false
然后activeTab1
单击 tab2,它工作正常。问题仅在于它在开始时处于活动状态...
- - - - - 编辑 - - - - - - -
这是笨蛋
如果将 activeTab1 设置为 TRUE,则它可以工作,如果设置为 FALSE(并且 activeTab2 设置为 TRUE),则它不起作用。
在回复莫里西时,名称 tabTab1... 仅适用于 Stackoverflow 问题...
----- EDIT2 --------
plunker url 更新了
----- EDIT3 --------
所以,刚刚意识到问题在于选项卡在select
. 如果您将 plunker 更改为
$scope.tabTab2 = function()
{
console.log("Tab2");
console.log(document.getElementById("newMap"));
}
并且activeTab
为 TRUE,控制台将显示
Tab2
null
Tab2
<div id="newMap" class="col-sm-12" style="height: 400px;"></div>
因此,该函数第一次运行该元素不存在,但第二次它确实存在......