Angular: do not listen to messages sent by yourself

One of my directives is responsible for expanding and collapsing the height of a div. Since this directive is used multiple times on the page, I want to ensure that when a user opens one box, it closes any other open boxes. My initial thought was to emit an event, but the issue arises when the directive itself also responds to the event, causing all divs to close.

Is there a way to ignore messages that originate from the same directive?

angular.module('cinemaApp')
.directive('expand', function ($rootScope) {
 return {
  restrict: 'A',
  link: function postLink(scope, element, attrs) {
    $rootScope.$on('contract', function(payload) {
      element.css('height', attrs.fixedheight);
    });

    scope.$watch('open', function(value) {
        element.css('height', (value ? 'auto' : attrs.fixedheight));

      $rootScope.$emit('contract');
    });
    element.css('height', attrs.fixedheight);
  }
 };
});

Answer №1

One way to trigger an event is by passing additional arguments to the listeners when emitting it. For example:

$rootScope.$emit('contract', element);

You can then listen for this event and handle it accordingly:

$rootScope.$on('contract', function(event, target) {
  if (target != element)
    element.css('height', attrs.fixedheight);
});

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Retrieving and storing data using jQuery's AJAX caching feature

When utilizing jQuery's $.ajax() method to perform an XHR based HTTP GET request to obtain a partial of HTML from a Ruby on Rails website, I encounter an issue. Specifically, every time a user clicks on tabbed navigation, I refresh an HTML table with ...

What is the correct way to pass a table record value to a jQuery function?

Within my php code, there is this snippet: echo "<td><button id='pausebut_{$record['idTrack']}' name='StopButton' type='Button' value='{$record['PreviewURL']}'>Stop</button> &l ...

Assigning values to targeted elements depending on their index in React can be achieved by utilizing various methods

Desired outcome: Click on <li> </li>, capture the index of the li element, and pass both the index and this.state.todos to the component Clock. Based on the index, select an element from the array and assign it a random value using Math.random( ...

Animate the div only when the button is clicked

I need a way to hide the text inside a div when it exceeds a certain height, but then expand it to full height upon clicking a button. However, I want this action to only affect the parent div of that specific button, rather than all the divs on the page. ...

Why is it possible for the EXPRESS+EJS template to access CONFIG without explicitly passing it when rendering?

Currently exploring my knowledge of node.js alongside express and the ejs template. As I delved into some code, I stumbled upon the fact that they were able to invoke config in the template without explicitly passing it as a variable during rendering. You ...

What is the best way to transform a series of character codes into a string using JavaScript?

Check out this interesting function I came across: function ungarble(garble){ var s = ""; for( var i = 0; i < garble.length; i++ ) { s += String.fromCharCode(garble[i]); } return s; } This function accepts an array of charCodes as input an ...

Angular UI-router allowing links to direct to different sections of the same domain but outside of the app

I am currently working on implementing ui-router in my Angular application. The base URL I am using is "/segments" and I have defined it using the base tag. <base href="/segments" /> Below is my routing configuration: var base = "/segments" $sta ...

Guide to embedding a Java-script file within an Angular component.ts Type-script file and triggering the onClick function for a MEAN stack application

import { Component } from '@angular/core'; import * as e from 'cors'; declare function click_fun():any; @Component({ selector: 'app-register', templateUrl: './register.component.html', styleUrls: ['./re ...

Create dynamic combo boxes using jQuery

My goal is to display a text field on the page if a user has only one credit card number in the database. However, if the user has multiple credit card numbers stored, I want to display all of them in a combo box. Below is the ajax response that I am rece ...

Is it possible to assign a deconstructed array to a variable and then further deconstruct it?

Is there a way to deconstruct an array, assign it to a variable, and then pass the value to another deconstructed variable all in one line of code? Take a look at what I want to achieve below: const { prop } = [a] = chips.filter(x => x.id == 1); Typic ...

Is there an issue with the jQuery ajax function when it comes to sending the RegistrationId to our server?

Beginning to work with the pushNotification service for my Android app, I successfully received a registration ID from the GCM server and attempted to send this ID to our server using a jQuery AJAX function. My intention was to send this ID after the user ...

Establishing the httppostedfilebase variable when validation is unsuccessful in an ASP.Net MVC view

I'm currently facing an issue with handling validation errors in my application. I have implemented uploading and downloading images successfully, but when there are validation errors and the controller redirects back to the page, the HttpPostedFileBa ...

Switching the orientation of an iPhone on Chrome can lead to content being cut off

Currently, I am conducting testing on an iPhone XS running iOS 15.6.1 The website seems to function properly on iOS Safari (although untested on Android), however, a problem arises when using Chrome and rotating the screen from landscape to portrait mode. ...

My attempt at automatically submitting the form using jQuery to the ajax function was unsuccessful, and no error messages were displayed

I've been experimenting with different approaches to solve this issue for the past two hours, but haven't had any luck yet. It's frustrating :( I am currently working on creating new form elements using values generated from JSON and a jQue ...

Executing jQuery function through variable reference

My goal is to modify the jQuery function being used based on the value of a switch statement. In this scenario, I want to select the element and then apply the appropriate jQuery function depending on the 'direction' parameter. $('#'+t ...

Angular throws a 404 error when making a JSONP http request

I've been incorporating Mailchimp integration into an Angular application. For using it in pure JS, I retrieved the code from the embedded form on the Mailchimp site: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js ...

The ng-switch functionality does not seem to be functioning properly, even when the is

My ng-switch is displaying both buttons instead of just one when isActive is false. Can anyone help me figure out what I am doing wrong? <div ng-switch="user.IsActive"> <div ng-switch-when="false"> <button type="button" (click)="activ ...

The CSRF token in Laravel Blade seems to be unreachable by Vue

Having a blade with the following code snippet. <meta name="csrf-token" content="{{ csrf_token() }}"> <covid-form> </covid-form> Inside the covid-form component, there is a form structure like this: <form @submit.prevent="send"&g ...

When there is no value in the input, the function will not be triggered

I need some assistance with my website development project. I want to implement a feature where, if the user enters input but doesn't submit anything, instead of triggering the function togglePopup(), a different function called togglePopup2() will be ...

Transferring values between radio buttons

Once a user selects a radio button and clicks continue, the corresponding links to other pages I coded should be displayed. However, the selected radio button link should not open immediately, as additional information needs to be entered by the user on th ...