Не могу вызвать внутреннюю функцию углового контроллера

0

Я хочу назвать внутреннюю функцию углового контроллера.

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/

  • 0
    Используйте директиву для инициализации плагина. Тогда у вас есть доступ к области видимости внутри директивы
Теги:

1 ответ

1
Лучший ответ

Функция может быть вызвана только в том случае, если она отображается в области $ 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.

Стоит отметить, что это довольно анти-угловатый способ сделать что-то. Правильный подход заключался бы в создании компонента, управляемого директивой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню