如何调用AngularJS指令中定义的方法?我有一个指令,这是代码:.directive('map', function() {
return {
restrict: 'E',
replace: true,
template: '<div></div>',
link: function($scope, element, attrs) {
var center = new google.maps.LatLng(50.1, 14.4);
$scope.map_options = {
zoom: 14,
center: center,
mapTypeId: google.maps.MapTypeId.ROADMAP };
// create map
var map = new google.maps.Map(document.getElementById(attrs.id), $scope.map_options);
var dirService= new google.maps.DirectionsService();
var dirRenderer= new google.maps.DirectionsRenderer()
var showDirections = function(dirResult, dirStatus) {
if (dirStatus != google.maps.DirectionsStatus.OK) {
alert('Directions failed: ' + dirStatus);
return;
}
// Show directions
dirRenderer.setMap(map);
//$scope.dirRenderer.setPanel(Demo.dirContainer);
dirRenderer.setDirections(dirResult);
};
// Watch
var updateMap = function(){
dirService.route($scope.dirRequest, showDirections);
};
$scope.$watch('dirRequest.origin', updateMap);
google.maps.event.addListener(map, 'zoom_changed', function() {
$scope.map_options.zoom = map.getZoom();
});
dirService.route($scope.dirRequest, showDirections);
}
}})我想打电话updateMap()在用户操作上。操作按钮不在指令中。什么是最好的方式updateMap()从控制器那里?
3 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
$scope
updateMap
$scope
<div ng-controller="MyCtrl"> <map></map> <button ng-click="updateMap()">call updateMap()</button></div>
app.directive('map', function() { return { restrict: 'E', replace: true, template: '<div></div>', link: function($scope, element, attrs) { $scope.updateMap = function() { alert('inside updateMap()'); } } }});
set-fn
map
<map set-fn="setDirectiveFn(theDirFn)"></map><button ng-click="directiveFn()">call directive function</button>
scope: { setFn: '&' },link: function(scope, element, attrs) { scope.updateMap = function() { alert('inside updateMap()'); } scope.setFn({theDirFn: scope.updateMap});}
function MyCtrl($scope) { $scope.setDirectiveFn = function(directiveFn) { $scope.directiveFn = directiveFn; };}
- 3 回答
- 0 关注
- 1242 浏览
添加回答
举报
0/150
提交
取消