加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJs - Calling Directive Method from Controller

发布时间:2020-12-17 07:06:28 所属栏目:安全 来源:网络整理
导读:? 原文链接:?https://www.codeproject.com/Tips/863825/Angular-Calling-Directive-Method-from-Controller ? ? 10 Jan 2015CPOL This tip will cover an uncommon issue in Angular – calling a directive method from a controller. Introduction This ti
?
原文链接:?https://www.codeproject.com/Tips/863825/Angular-Calling-Directive-Method-from-Controller
?
?
10 Jan 2015CPOL
This tip will cover an uncommon issue in Angular – calling a directive method from a controller.

Introduction

This tip will cover an uncommon issue in Angular – calling a directive method from a controller.

I’ve first encountered this issue when I worked with Angular and WinJS on an XBOX project. I needed to open the Settings popup on button click event,but this popup was placed in the directive.

Normally I would expose a?public?method in the directive and call it from the Controller,unfortunately that’s not so easy when working with JavaScript since it’s a dynamic language,and the directive is a DOM element.

The Problem

The main problem is that directive contained in the controller,which means that the controller recognizes the directive (the controller can call directives methods and pass parameters to him),but the directive has no idea about the controller that he placed in – since directive can appear multiple times in different parts of our program.

So,if you want to call a directives method from the controller,you would need to work around it.

The Solution

We will need to create an empty object in our controller and pass it to the directive as a parameter.

While receiving it in our directive – we’ll inject a method to it:

app.directive(myDirective‘,function () { return { restrict: E‘,scope: { /*The object that passed from the cntroller*/ objectToInject: =‘,},templateUrl: templates/myTemplate.html‘,link: function ($scope,element,attrs) { /*This method will be called whet the ‘objectToInject‘ value is changes*/ $scope.$watch(objectToInject‘,function (value) { /*Checking if the given value is not undefined*/ if(value){ $scope.Obj = value; /*Injecting the Method*/ $scope.Obj.invoke = function(){ //Do something } } }); } }; });

Declaring the directive in the HTML with a parameter:

<my-directive object-to-inject=" injectedObject"></ my-directive>

Our Controller:

app.controller("myController",[$scope‘,function ($scope) { $scope.injectedObject = {}; }];

Adding a button that will invoke the method when clicking on it:

<input type=‘button‘ value=‘Click Me‘ ng-click=‘injectedObject.invoke();‘ />

Now we can call the methods from our controller!

Notice that the controller actually doesn’t know that?invoke()?method is implemented in our object,all it knows is that this object exists,otherwise we would get an exception while calling a method of undefined object.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读