我想从指令中调用控制器中的函数。
我的指令
.directive('multEcs', ['$http', function($http){
    return{
        restrict: 'A',
        replace:false,
        link: function(scope, elem, attr){
            scope.addToArray();
        }
    }
}]);控制器中的方法
$scope.addToArray = function(){
    console.log('method called');
}发布于 2014-12-03 02:32:10
尝试将要调用的函数传递给指令。
 .directive('multEcs', ['$http', function($http){
     return{
         restrict: 'A',
         replace:false,
         scope : {
             myFunctionToCall : '='
         },
         link: function(scope, elem, attr){
             scope.myFunctionToCall();
         }
     }
 }]);发布于 2014-12-03 05:30:58
第一种方式是控制器和指令之间的单向绑定:
JS:
angular.module('App',[])
.directive('multEcs', [function(){
    return{
        restrict: 'A',
        replace: false,
        scope: {
            addToArray: '&'                            
        },
        link: function($scope, elem, attr){
            $scope.addToArray();
        }
    }
}])
.controller('HomeCtrl', ['$scope', function($scope){
    $scope.addToArray = function(){
        console.log('method called');
    }
}])HTML:
<div ng-app="App">
    <div ng-controller="HomeCtrl">
        <div mult-ecs add-to-array="addToArray()">multEcs</div>
    </div>
</div>第二种方法是使用个人控制器在目录中创建隔离的作用域。建议用于指令之间的通信:
JS:
angular.module('App',[])
.directive('multEcs', [function(){
    return {
        restrict: 'A',
        replace: false,
        controller: 'HomeCtrl',
        scope: {},
        link: function($scope, element, attrs, ctrl){
            ctrl.addToArray();
        }
    }
}])
.controller('HomeCtrl', ['$scope', function($scope){
    this.addToArray = function(){
        console.log('method called');
    };
}]);HTML:
<div ng-app="App">
    <div>
         <div mult-ecs>multEcs</div>
    </div>
</div> https://stackoverflow.com/questions/27247455
复制相似问题