Angular - 从视图到控制器的传输ng-init

时间:2016-07-16 09:43:39

标签: javascript angularjs ng-init

我以这种方式持有ng-init:

                    <div class="map-content" style="min-height: 200px">
                        <div ng-init="data = {latitude : 35.757563, longitude: 51.409469}">
                            <div map-marker ng-model="data" class="demo-map"></div>
                        </div>
                    </div>

这是我的控制器:

app.controller('mapController' , function($scope) {})
    .directive('mapMarker',function(){
        return {
            restrict: 'EA',
            require: '?ngModel',
            scope:{
                myModel: '=ngModel'
            },
            link: function(scope , element, attrs , ngModel) {

                scope.mapData = {};
                scope.mapData.latitude = attrs.latitude;
                scope.mapData.longitude = attrs.longitude;
                console.debug(scope.myModel);
                var mapOptions;
                var googleMap;
                var searchMarker;
                var searchLatLng;

                ngModel.$render = function(){
                    searchLatLng = new google.maps.LatLng(scope.myModel.latitude, scope.myModel.longitude);

                    mapOptions = {
                        center: searchLatLng,
                        zoom: 12,
                        mapTypeId: google.maps.MapTypeId.ROADMAP
                    };

                    googleMap = new google.maps.Map(element[0],mapOptions);

                    searchMarker = new google.maps.Marker({
                        position: searchLatLng,
                        map: googleMap,
                        draggable: true
                    });

                    google.maps.event.addListener(searchMarker, 'dragend', function(){
                        scope.$apply(function(){
                            scope.myModel.latitude = searchMarker.getPosition().lat();
                            scope.myModel.longitude = searchMarker.getPosition().lng();
                        });
                    }.bind(this));

                };

                scope.$watch('myModel', function(value){
                    var myPosition = new google.maps.LatLng(scope.myModel.latitude, scope.myModel.longitude);
                    searchMarker.setPosition(myPosition);
                }, true);
            }
        }
    });

我想将ng-init传输到我的控制器中。你有什么想法吗?

2 个答案:

答案 0 :(得分:0)

非常简单:

app
    .controller('mapController', function($scope) {
        $scope.data = {
            latitude: 35.757563,
            longitude: 51.409469
        };
    })
    .directive('mapMarker', function() {
        // ...
    });

然后将其从HTML中删除:

<div class="map-content" style="min-height: 200px">
    <div map-marker ng-model="data" class="demo-map"></div>
</div>

答案 1 :(得分:0)

myApp.controller('mapController' , function($scope) {
                $scope.$watch('data', function(value){
                    console.log(value);
                }, true);
})
    .directive('mapMarker',function(){
        return {
            restrict: 'EA',
            require: '?ngModel',
            scope:{
                myModel: '=ngModel',
                data:'=data'
            },
            link: function(scope , element, attrs , ngModel) {
}
}
});