简体   繁体   中英

Angular js directive using controller as syntax ng-click not working

I am having trouble getting a click event in a directive with an isolated scope to work using "controller as" syntax in Angular 1.3 the code for the directive is as follows:

myDirectives.directive('gsphotosquare', dirfxn);

function dirfxn() {
    var directive = {
        replace: false,
        scope: {
            photoInfo: '=',
            photoBatchNum: '=',
            thumbnailwidth: '='
        },
        restrict: 'EA',
        controller: Ctrller,
        controllerAs: 'ctrl',
        template: '<div ng-click="ctrl.squareClicked()">test</div>',
        //templateUrl: 'views/directives/gsphotosquare.html',
        bindToController: true, // because the scope is isolated
        link: linkFunc //adding this didn't help
    };
    return directive;
}

function Ctrller() {
    var vm = this;

    vm.squareClicked = function () {
        alert('inside clickhandler for gsphotosquare directive');
    };
}

function linkFunc(scope, el, attr, ctrl) {

    el.bind('click', function () {
        alert('inside clickhandler for gsphotosquare directive');
    });
}

And here is how the directive is used in the DOM:

 <span class="input-label">General Site Photos</span>
    <div class=" item row">
    <gsphotosquare photo-info="mt.photos.v1f1[0]" photo-batch-num="mt.photoBatchNum" ></gsphotosquare>
    <gsphotosquare photo-info="mt.photos.v1f1[1]" photo-batch-num="mt.photoBatchNum" ></gsphotosquare>
    <gsphotosquare photo-info="mt.photos.v1f1[2]" photo-batch-num="mt.photoBatchNum" ></gsphotosquare>
   <gsphotosquare photo-info="mt.photos.v1f1[3]" photo-batch-num="mt.photoBatchNum" ></gsphotosquare>
</div>

Any ideas why clicking on the rendered directive doesn't show the alert?

Try defining your controller a little differently:

myDirectives.controller('Ctrller', Ctrller);

then in your directive:

controller: 'Ctrller as ctrl',

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM