Я хочу назвать внутреннюю функцию углового контроллера.
index.html
<script type="text/javascript">
$(document).ready(function() {
$('#example').multiselect({
onChange: function(option, checked, select) {
//alert('Changed option ' + $(option).val() + '.');
var scope = angular.element(document.getElementById("MainWrap")).scope();
var n = $(option).val();
scope.$apply(function () {createMarker(data[n-1]);});
}
});
});
</script>
controller.js
var mapApp = angular.module('mapApp', []);
mapApp.controller('mapContainer',function($scope){
var mapOptions = {
zoom: 10,
center: new google.maps.LatLng(12,77),
mapTypeId: google.maps.MapTypeId.TERRAIN
}
$scope.map = new google.maps.Map(document.getElementById('map'), mapOptions);
$scope.markers = [];
var createMarker = function (info){
var marker = new google.maps.Marker({
map: $scope.map,
position: new google.maps.LatLng(info.lat, info.long),
name: info.name
});
$scope.markers.push(marker);
};
});
Я могу скрыть данные журнала внутри mapApp.controller, но при вызове функции createMarker появляется сообщение об ошибке: createMarker не определяется ошибкой. Следуя этому примеру, чтобы открыть контроллер http://jsfiddle.net/austinnoronha/nukRe/light/
Функция может быть вызвана только в том случае, если она отображается в области $ scope.
$scope.createMarker = function (info){
var marker = new google.maps.Marker({
map: $scope.map,
position: new google.maps.LatLng(info.lat, info.long),
name: info.name
});
$scope.markers.push(marker);
};
В вашем шаблоне вам также понадобится доступ к нему через область контроллера:
scope.$apply(function () {scope.createMarker(data[n-1]);});
Это предполагает, что объект области, который вы извлекаете, коррелирует с областью действия mapContainer.
Стоит отметить, что это довольно анти-угловатый способ сделать что-то. Правильный подход заключался бы в создании компонента, управляемого директивой.