2016-01-10 160 views
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

使用指令来初始化插件。然后你可以访问指令中的作用域 – charlietfl

回答

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的范围。

值得注意的是,这是一个非常好的方法来做一些事情。正确的做法是创建一个指令驱动的组件。

相关问题