【发布时间】:2015-12-04 00:47:21
【问题描述】:
所以我正在尝试习惯 Angular,并且在尝试调用指令(谷歌地图https://github.com/davidepedone/angular-google-places-map)和执行反向地理编码时遇到了一些麻烦。我认为这将是一个更一般的指令问题。
我试图在指令中调用一个函数来更新谷歌地图的地点信息以及地图。我脑海中的想法是,我需要通过控制器传递一个变量,将该变量的范围限定为指令,然后指令将运行该函数?
更新:
<div class="row">
<places-map selectedid="selectid(place.id)"></places-map>
</div>
<button ng-click="selectid(place.id)">{{place.id}}</button> </div>
通过这个点击我想去控制器,
$scope.selectid= function (pickplaceid){
$scope.selectedid(pickplaceid);
}
那么 selectplaceid 应该在指令的范围变量中。
scope: {
customCallback: '&?',
picked: '=?',
address: '=?',
fallback: '=?',
mapType: '@?',
readonly: '@?',
responsive: '@?',
draggable: '@?',
toggleMapDraggable: '=?',
placeNotFound: '=?',
updateMarkerLabel: '=?',
selectedid:'='
},
并且可以这样调用我的方法:
link: function ($scope, element, attrs, controller) {
//everything else from angular-google-places
$scope.selectedid= function (selectedplace)
{
///Whatever I want to do to geocode with the placeid
}
我认为我可能完全错误地这样做了,因为指令调用根本没有运气。我正在尝试根据我单击的位置更新我的地图,并从 placeId 中提取该特定地点的信息。任何帮助都会很棒。
【问题讨论】:
-
您在指令中创建了一个隔离范围,因此它不知道控制器中的变量。你需要在html中传递你需要的变量:
-
这不是说你的范围selectplaceid=place.id吗?它将如何调用函数 selectplaceid?
-
实际上,在重新阅读您的问题后,我认为您可以在控制器中将
$scope.selectplaceid = pickplaceid;更改为$scope.selectplaceid(pickplaceid);,以调用指令中的方法。但是,您仍然需要将该函数传递给 HTML 中的指令,因为您已经创建了一个隔离范围。查看文档中传递 customerInfo 的示例:docs.angularjs.org/guide/directive -
是的,这就是我的问题,如何从 html 端调用隔离指令作用域函数?我知道我们将 $scope 设置为 customerInfo 示例中显示的值但功能似乎有点不同?
-
哦对了,它似乎需要使用
&作为函数参数传递。我知道我做过类似的事情,但不是在我的工作 PC atm 上。也许这是一个有用的例子:weblogs.asp.net/dwahlin/…
标签: javascript angularjs google-maps angularjs-directive angularjs-scope