【问题标题】:Angular-UI $scope.myMap is undefinedAngular-UI $scope.myMap 未定义
【发布时间】:2013-01-31 09:50:39
【问题描述】:

我正在尝试 $watch myMap 但它永远不会触发。我已经把它缩小到使用了ui-if(如果我删除了 ui-if,$scope.myMap 是正确的谷歌地图对象)。但是我需要保留 ui-if 以便让 ui-map 等待我的 AJAX/Db 查询完成。

为什么 myMap 没有被添加到作用域中(以及如何获得它)?

Plunker

编辑我从this GitHub issue 看到 ui-if 创建了自己的范围。那么我如何访问它的范围/myMap 现在居住在哪里?还有,为什么 ui-if 会创建一个新的作用域?

【问题讨论】:

    标签: javascript html angularjs angular-ui


    【解决方案1】:

    在您的 GoogleMaps 控制器上创建模型:

    $scope.model = {};
    

    将模型作为参考传递给ui-map 指令:

    ui-map="model.myMap"
    

    注意变化:

    $scope.$watch('model.myMap', function(map){
        ...
    }
    

    这样可以避免在ui-if 范围内创建myMap 属性。

    还可以查看documentation,了解有关范围原型继承的更多信息。

    【讨论】:

    • 啊哈!现在 myMap 对象可用(locations 对象也是如此);一切似乎都在顺利进行,但是标记没有出现在地图上:plnkr.co/edit/khlQVB 我尝试检查一个有标记与我的比较的 google-map 对象(查看我的地图对象是否已注册它们) ,但我不知道哪个属性保存标记数据(认为它可能在overlayMapTypesqc
    • 想通了!而不是设置var latLng = new google.maps.LatLng( $scope.locations[i][0],$scope.locations[i][1]); 我不得不将每个$scope.locations[i][#] 保存在自己的参数中,然后运行new google.maps.LatLng
    【解决方案2】:

    您可以指定要存储对象的位置,包括在父范围内:

    ui-map="$parent.myMap"
    

    尽管这被认为是半不可靠的(因为任何数量的指令都可能创建额外的作用域层),但您可能需要考虑将其设置为对象的属性。

    【讨论】:

    • 哦,很高兴知道(我可以指定以这种方式将其存储在父作用域中)。谢谢!我想我更喜欢将它设置为对象的属性。 @bmleite 的答案似乎正是如此,但奇怪的是标记没有出现在地图上。
    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多