【问题标题】:How to submit a form and get data from google map marker?如何提交表单并从谷歌地图标记获取数据?
【发布时间】:2016-02-12 19:34:06
【问题描述】:

使用Angular google map 插件。我正在尝试在谷歌地图标记 infoWindow 中提交表单并读取控制器中的数据。

我无法在控制器中检测到单击“确定”。

$scope.register = function()
{
     console.log('register clicked');
}

我无法看到此日志打印。

<ui-gmap-google-map >
                <ui-gmap-marker >
                    <ui-gmap-window options="windowOptions" show="true" closeClick="closeClick()">
                        <form class="form "  >
                                <label >Name</label>&nbsp;
                                <input  type="text" ng-model="name"/>

                                <label>Place</label>&nbsp;
                                <input  type="text" ng-model="place"/>

                                <button type="submit"  ng-click="register()">Ok</button>
                                 <button type="button"  ng-click="closeClick()">Cancel</button>  
                        </form>
                    </ui-gmap-window>
                </ui-gmap-marker>
            </ui-gmap-google-map>

【问题讨论】:

  • 你能澄清一下问题是什么吗?
  • @devlincarnate 我已经更新了问题,基本上我在标记的 infoWindow 中有一个表单,但我无法提交该表单。
  • 可能ui-gmap-marker有自己的作用域,无法访问你的作用域,或者你在封装你的ui-gmap-google-map的控制器中没有你的函数...
  • @niklas 我不知道标记有单独的范围或控制器,你能解释一下吗?
  • 您尝试过任何答案吗?你有没有以另一种方式完成它?谢谢

标签: javascript angularjs google-maps-api-3 angular-google-maps


【解决方案1】:

我已经使用Compile Angularjs 服务解决了它。

只需为弹出窗口分配一个 ID 并编译它。

var pp = angular.element(document.querySelector('#id_poup_element'));

$compile(pp)($scope);

很高兴回答任何问题。

【讨论】:

    【解决方案2】:

    ui-gmap-window 内容在另一个范围内。 假设你的主控制器中有register() 函数,如果你想从地图窗口访问它,你需要使用$parent 调用它两次:

    <button ng-click="$parent.$parent.register()">Ok</button>
    

    这是plunker,您可以看到它在工作。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      不建议使用 $parent.$parent ,因为您直接引用父范围,修改您的代码,使您使用的控制器在谷歌地图 UI 的范围内,我的回答可能含糊不清,但会帮助您获得一些线索 - 让你的函数在地图控制器的范围内被调用

      .controller("someController", function($scope, uiGmapGoogleMapApi) {
          uiGmapGoogleMapApi.then(function(maps) {
      
          });
           $scope.register = function(){
              // do something
            };
      });
      

      【讨论】:

      • 是的,这很好,而且只要可以创建一个新的控制器显然更好。我只是试图解释为什么 OP 案例不起作用。谢谢你的建议:)
      猜你喜欢
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      相关资源
      最近更新 更多