如何从Angular上的控制器调用指令函数

时间:2016-02-05 10:29:41

标签: javascript angularjs

我有一个控制个性化多选的指令。有时从主控制器我想清除所有多选。我有多选值填充" filter"双向变量,我可以从那里删除内容,但在这样做时,我还必须更改一些样式和其他内容。换句话说:我必须从属于控制器的按钮调用属于该指令的方法。这个数据结构是否可行?:

(顺便说一句,我发现了其他问题和例子,但他们的指示并没有自己的范围。)

function MultiselectDirective($http, $sce) {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'temp.html',
        scope: {
            filter: "=",
            name: "@",
            url: "@"
        },
        link: function(scope, element, attrs){
           //do stuff
           scope.function_i_need_to_call = function(){
              //updates directtive template styles
           }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

最佳解决方案和角度方式 - 使用event

jsfiddle上的实例。



angular.module('ExampleApp', [])
  .controller('ExampleOneController', function($scope) {
   $scope.raise = function(val){
   	 $scope.$broadcast('raise.event',val);
   };
  })
  .controller('ExampleTwoController', function($scope) {
   $scope.raise = function(val){
   	 $scope.$broadcast('raise.event',val);
   };
  })
  .directive('simple', function() {
    return {
      restrict: 'A',
      scope: {
      },
      link: function(scope) {
        scope.$on('raise.event',function(event,val){
					console.log('i`m from '+val);
        });
      }
    }
  });

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="ExampleApp">
  <div ng-controller="ExampleOneController">
    <h3>
      ExampleOneController
    </h3>
    <form name="ExampleForm" id="ExampleForm">
      <button ng-click="raise(1)" simple>
       Raise 1
      </button>
      
    </form>
  </div>
  <div ng-controller="ExampleTwoController">
    <h3>
      ExampleTwoController
    </h3>
    <form name="ExampleForm" id="ExampleForm">
       <button ng-click="raise(2)" simple>
       Raise 2
      </button>
    </form>
  </div>
</body>
&#13;
&#13;
&#13;

答案 1 :(得分:-1)

我认为从控制器到指令的更好解决方案是这样的:

X,Y