20

我认为在开箱即用的指令上使用众所周知的角度属性应该很容易。

例如,如果我的指令的名称是 myDirective 我想这样使用它:

<div ng-controller="myController">
   <my-directive ng-click="doSomething()"><my-directive>
</div>

而不需要像下面的示例中那样定义自定义点击属性 (onClick)

<div ng-controller="myController">
   <my-directive on-click="doSomething()"><my-directive>
</div>

似乎 ng-click 可以工作,但是您也需要在指令标签上指定 ng-controller ,这是我不想要的。我想在周围的 div 上定义控制器

是否可以在指令上使用 ng-click 以及在父 html 元素上定义的控制器?

4

1 回答 1

34

这是更新的代码。也许这就是你要找的。

html:

<div data-ng-app="myApp">
    <div data-ng-controller="MyController">
        <my-directive data-ng-click="myFirstFunction('Hallo')"></my-directive>
        <my-directive data-ng-click="mySecondFunction('Hi')"></my-directive>
    </div>
</div>

角度:

var app = angular.module('myApp', []);

app.directive('myDirective', function(){
    return {
        restrict: 'EA',
        replace: true,
        scope: {
            eventHandler: '&ngClick'
        },
        template: '<div id="holder"><button data-ng-click="eventHandler()">Call own function</button></div>'
    };
});

app.controller('MyController', ['$scope', function($scope) {
    $scope.myFirstFunction = function(msg) {
         alert(msg + '!!! first function call!');   
    };
    $scope.mySecondFunction = function(msg) {
         alert(msg + '!!! second function call!');   
    };
}]);

编辑

检查我在 jsFiddler 中制作的解决方案是您正在寻找的吗?

http://jsfiddle.net/migontech/3QRDt/1/

于 2013-03-25T11:41:16.040 回答