我有一个指令,这里是代码:
.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()的最好方法是什么?
如果要使用隔离的范围,可以使用控制器作用域中的变量的双向绑定传递控制对象。还可以使用相同的控件对象在一个页面上控制同一指令的几个实例。
angular.module('directiveControlDemo',[])
.controller('MainCtrl',function($scope) {
$scope.focusinControl = {};
})
.directive('focusin',function factory() {
return {
restrict: 'E',template: '<div>A:{{internalControl}}</div>',scope: {
control: '='
},link: function(scope,attrs) {
scope.internalControl = scope.control || {};
scope.internalControl.takenTablets = 0;
scope.internalControl.takeTablet = function() {
scope.internalControl.takenTablets += 1;
}
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="directiveControlDemo">
<div ng-controller="MainCtrl">
<button ng-click="focusinControl.takeTablet()">Call directive function</button>
<p>
<b>In controller scope:</b>
{{focusinControl}}
</p>
<p>
<b>In directive scope:</b>
<focusin control="focusinControl"></focusin>
</p>
<p>
<b>Without control object:</b>
<focusin></focusin>
</p>
</div>
</div>