繁体   English   中英

角度控制器指令范围

[英]Angular Controller Directive Scope

在过去的几个小时中,我一直在努力解决以下问题,我不知道如何解决。 我正在做一个使用angular-openlayers-directive指令的角度应用程序。 $ scope.center对象包含最初在地图上查看的位置。 以下代码是查看地图的页面控制器的第一行。 这一切都很好。

angular.extend($scope, {
    center: {
        lat: 0,
        lon: 0,
        zoom: 1,
        autodiscover: true
    },
    layers: {
        normal: {
            type: 'Tile',
            source: {
                type: 'OSM'
            }
        }
    }
});

但是,现在我正尝试使用从Google地理编码api获取的位置更新中心对象。 单击一行google api结果的结果会在控制器中调用以下函数:

$scope.gotoLocation = function(lat, lon) {
    $log.log("called");
    $scope.center = {
        lat: 50,
        lon: 50,
        zoom: 0
    }
}

在我的控制台中,出现了字符串“被叫”的日志,但是地图的视图没有改变。 同样,当我在函数中打印$ scope.center时,会打印上面设置的原始对象,而该对象已更改为我当前的经纬度,因为autodiscover选项设置为true。 我已经用以下代码检查了它:

<openlayers ol-controls="controls" ol-center="center" ol-layers="layers" ol-markers="markers">
    <ol-marker ng-repeat="marker in markers" lat="marker.lat" lon="marker.lon"></ol-marker>
</openlayers>

<form>
    Latitude : <input type="number" step="any" ng-model="center.lat" />
    Longitude : <input type="number" step="any" ng-model="center.lon" />
    Zoom : <input type="number" step="any" ng-model="center.zoom" />
</form>

所有3个字段都显示我当前的经度和纬度,并且当我更改字段时,地图位置也会更新(!)。 我不知道为什么从模板本身更改模型确实起作用而从控制器更改模型却不起作用。 谁能帮我这个?

链接到指令: https : //github.com/tombatossals/angular-openlayers-directive/blob/master/dist/angular-openlayers-directive.js

看来您的自动发现变量已删除。 这与自动更新有关吗?

尝试更改gotoLocation函数以更新属性,而不是覆盖对象:

$scope.gotoLocation = function(lat, lon) {
    $log.log("called");

    $scope.center.lat = 50;
    $scope.center.lon = 50;
    $scope.center.zoom = 0;

}

它与不同的范围有关。 使用ng-view包含了我的地图视图。 我的搜索栏是使用ng-include包含的,因此它们的作用域不同。 我用工厂解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM