是否可以从外部调用directive控制器内部定义的方法。

<div ng-controller="MyCtrl">
    <map></map>
    <button ng-click="updateMap()">call updateMap()</button>
</div>

app.directive('map', function() {
    return {
        restrict: 'E',
        replace: true,
        template: '<div></div>',
        controller: function(){
           $scope.updateMap = function(){
              //ajax call here.
           }
        },
        link: function($scope, element, attrs) {
            $scope.updateMap();
            //do some dom transformation
        }
    }
});


我想从我的观点调用方法updateMap()函数。

最佳答案

如果在控制器而不是作用域上公开该功能,则可以在父作用域上公开该控制器,例如:



    controller: function($scope, $element, $attrs){
       // Verify this. The controller has to be added to the parent scope, if the directive itself is creating a scope
       $scope.$parent[$attrs["name"]]=this;

       this.updateMap = function(){
          //ajax call here.
       }
    },


现在,在主控制器中,您将可以访问控制器:

<button ng-click="myMap.updateMap()">call updateMap()</button>

这类似于ng-model公开其控制器的方式。将控制器视为指令的API。

10-07 23:18