Angular指令调用父控制器函数

用户1995781

如何获得我的指令以调用父级的控制器功能?我有一个如下所示的指令:

HTML:

<div ng-app="myapp" ng-controller="mainController as mainCtrl">
some body text<br>
    <a href="javascript:;" ng-click="mainCtrl.myfunc()">Click Me from body</a>
    <photo photo-src="abc.jpg" caption="This is so Cool" />
</div>

Javascript:

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

app.controller('mainController', function(){
    var vm = this;
    vm.myfunc = myfunc;

    function myfunc(){
        console.log("Log from myfunc");
    }
});

app.directive('photo',function(){
    return {
        restrict: 'E',
        template: '<figure> <img ng-src="{{photoSrc}}" width="500px">   <figcaption>{{caption}}</figcaption>    <a href="javascript:;" ng-click="mainCtrl.myfunc()">Click Me</a></figure>',
        replace: true,
        scope: {
            caption: '@', 
            photoSrc: '@'
        }
    }
});

http://jsfiddle.net/7q9v3zz2/

当我单击Click Me from body链接时,它会按预期显示控制台日志消息。但是,当我单击时,什么也没有发生Click Me from directive我该如何运作?

PSL

您正在使用隔离范围,因此您不能直接访问父范围,因为它们没有继承到隔离范围。您可以使用$parent(通过这样做ng-click="$parent.mainCtrl.myfunc()")。但是,这变得很丑陋,并且与它的父级紧密耦合,相反,您可以使用函数绑定(&)。

return {
        restrict: 'E',
        template: '<figure> <img ng-src="{{photoSrc}}" width="500px">   <figcaption>{{caption}}</figcaption>    
        <a href="javascript:;" ng-click="onClick()">Click Me from directive</a></figure>',
        replace: true,
        scope: {
            caption: '@',
            photoSrc: '@',
            onClick: '&' //<-- Accept function binding and use it in the template
        }
    }

并在消费者级别进行注册,以使它变得更加可重用。

 <photo photo-src="abc.jpg" caption="This is so Cool" on-click="mainCtrl.myfunc()" />

小提琴

您还可以使用子范围创建而不是隔离范围来直接调用父控制器方法。这是一个演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从AngularJS的父控制器调用指令的方法

当父控制器ng-click指令被调用时,我们如何调用子控制器?

angularjs指令不会调用控制器函数

Angular-在子指令的控制器中获取父指令的控制器(不是链接功能)

从指令调用的控制器函数内部的空数组-AngularJS

AngularJs-从指令调用控制器函数

如何在Angular 1.6.7的子组件中调用父控制器函数

AngularJS:从我的指令中调用控制器函数

AngularJS指令从Parent的控制器调用函数

从控制器调用angularjs指令函数

Angular JS-在外部控制器中调用指令函数

从控制器调用指令方法

从Angular指令内的ng-click中调用父控制器中的方法

从子控制器调用父控制器的方法

从指令更新控制器值并调用控制器功能。在调用函数之前,不会更新controller-calue

模型内部的Codeigniter调用父控制器函数

使用父控制器方法调用测试Angular

AngularJS指令调用控制器功能

是什么导致控制器函数在Angular中被调用?

Angular JS指令特定的控制器和父控制器

Angular JS:如何在Angular指令中从控制器的链接内部调用函数

如何从控制器调用指令函数?

从控制器angularjs调用指令函数

从带有参数的指令中调用控制器函数

父控制器上的调用方法?

在父级上下文中调用父级控制器的函数

Angular:如何使用ng-if或其他Angular指令从HTML视图中调用控制器函数

AngularJS 从父到子指令控制器函数调用

如何将值从 AngularJS 指令传递给父控制器中的函数