2016-01-10 163 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的範圍。

值得注意的是,這是一個非常好的方法來做一些事情。正確的做法是創建一個指令驅動的組件。

相關問題