将范围绑定到指令的控制器

时间:2015-06-12 14:01:59

标签: javascript angularjs angularjs-directive

请考虑以下角度指令:

 angular.module('map').directive('mapOptions',
    function MapOptionsDirective() {

      return {
        restrict: 'E',
        transclude: true,
        scope: {
          map: '=',
          layers: '=',
          mapId: '@'
        },
        controller: mapOptionsController,
        controllerAs: 'mapOptionsCtrl',
        bindToController: true,
        templateUrl: 'modules/map/views/mapoptions.client.view.html'
      };


      ///////////////////////////

      function mapOptionsController($scope) {
        var vm = this;
        console.log(vm);              // log #1
        console.log($scope.map)       // log #2
        console.log(vm.map);          // log #3
      }
});

请注意隔离范围,controllerAs语法以及bindToController选项设置为true

这是我的指令在html中的样子:

<map-options layers="mapCtrl.layers" map="mapCtrl.map" map-id="{{mapCtrl.mapId}}">

日志输出为:

  • log#1:注销"constructor {}",我猜是好的。
  • log#2:记录绑定到范围的正确对象。
  • log#3:注销undefined。这是我期望找到$scope上找到的对象。

我想直接将隔离范围绑定到控制器,但这不起作用。奇怪的是,范围被数据填充,但是这个数据绑定到范围,并且不像我希望的那样直接绑定到指令。我想不通,为什么。我一定错过了一些明显的东西。谢谢!

1 个答案:

答案 0 :(得分:0)

我只需要从Angular1.2切换到Angular1.3,现在它按预期工作。