Display the initial x list items without utilizing ngFor in Angular 2

In the template, there are 9 <li> elements, each with a *ngIf condition present.

It is possible that 5 or more of them may return true, but the requirement is to only display the first 4 or less if needed.

Priority is given to the order of the <li>.

An attempt was made using the following:

// Template
<li *ngIf="checkCond(profile.Projects.length != 0)">Example</li>
... and so on...

// Component
shown: number = 0;

public checkCond(value: boolean): boolean {
    if (value) {
        this.shown += 1;
        return this.shown <= 4;
    }
    else return false;
}

The issue with this approach is that the if (value) continuously fires, resulting in an increment greater than anticipated. Consequently, it ultimately returns false.

It is preferred not to use *ngFor for this scenario.

Answer №1

checkCond() gets called with every change detection cycle

Instead, store the result in a property and bind to that property

constructor() { // or any other location
  this.checkCond(profile.Projects.length != 0);
}

cond:boolean;

public checkCond(value: boolean): boolean {
    if (value) {
        this.shown += 1;
        this.cond = this.shown <= 4;
    }
    else 
      this.cond = false;
}
<li *ngIf="cond">Example</li>

Answer №2

To implement a hardcoded approach like this, consider creating an array and iterator within your component:

customArray: boolean[] = [true, true, true, false, false, false];
customIterator: number = 0;

In your HTML template:

...<li *ngIf="customArray[customIterator]">Example 1</li>
{{customIterator = customIterator + 1}}
<li *ngIf="customArray[customIterator]">Example 2</li>
{{customIterator = customIterator + 1}}...

However, this method may not be the most efficient. Consider using NgFor for cases like this.

Another option is to explore @ViewChildren or @ContentChildren. Have you looked into those?

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

Angular Select displays a MatIcon along with the selected value

My code looks like this: <mat-select > <mat-option *ngFor="let option of options" [value]="option.id" [disabled]="option.disabled" [matTooltip]="option.tooltip" > & ...

Does Apollo Federation provide support for a code-first development approach?

I have declarations using 'code-first' approach in my project, but now I want to utilize them as microservices. How can I separate my 'typeDefs' and 'resolvers' following Apollo's 'schema-first' methodology? Is ...

Using p5.js with TypeScript and Webpack is not supported

I'm currently working on a library project that involves utilizing p5.js. Specifications Here is a snippet of my Webpack configuration: const path = require('path'); module.exports = { entry: './start.ts', output: { ...

Creating an Angular component that is flexible in terms of the data type it accepts

Currently, I have successfully implemented a lookup component that is responsible for fetching and filtering a list of users based on the query provided. When a user is selected from this list, they are set as members. This component can be configured with ...

Identify the category of the component

Using a Link component from version 4.0.0-beta.2, I am exploring its capability to override the root element with a field called component. My goal is to wrap the Link component in a new component called MyLink and pass a custom component through props: ...

The function you are trying to call in Node.js is not defined

Just starting out with NodeJs and trying to implement async/ series, but encountering an error: task.save is not a function Here is the code snippet I am working with: async.series([ (cb) => { Task .findById(id) ...

In JavaScript, a variable's value can be assigned to another variable using the variable

I have a collection of predetermined variables. I dynamically assign a value to another variable, which ends up representing the name of one of the predefined variables. This allows me to easily determine which set variable to use on a particular section o ...

Tips for Passing On Parent tabindex Value to Children

Is there a way to propagate a parent's tabindex value to all of its children without individually setting tabindex for each child? Here is an example code snippet: <div id="app"> <div tabindex="2" class="parent-sec ...

An error occurred due to a missing value within the forEach loop

In my JavaScript object, I am encountering an issue with a key. resolve: function () { var result = this.initialValue; console.log('initial value:',result); // 5 this.functions.forEach(function (element, index) { ...

Creating HTML elements dynamically with attributes based on the `as` prop in React using TypeScript

Is there a way to dynamically create HTML elements such as b, a, h4, h3, or any element based on the as={""} prop in my function without using if guards? I have seen a similar question that involves styled components, but I am wondering if it can be done ...

Using a set formatter in jqGrid within a personalized formatter

Can I incorporate a predefined formatter into a custom formatter? Here is an example using the colModel: colModel: [ ... { name: 'col1', formatter: myFormatter } ... ] Below is the custom formatter function: function myFormatter(cellVal ...

Are there any straightforward methods to fully freeze an object along with all its descendants in JavaScript (Deep Freeze)?

Often when passing an object as a parameter, functions may access the object by reference and make changes to the original object. This can sometimes lead to unwanted outcomes. Is there a way to ensure that an object remains unchanged? I am aware of the Ob ...

Discover the steps to obtain a READY status for your uploaded video using the Kaltura VPaaS API

After uploading the video, it will show as CONVERTING in the media status on the KMC dashboard. Eventually, it will change to READY. Is there a way for me to verify the status and make sure it is READY? ...

Having a collection of JSON objects, I am unable to remove an element using the pop() method in JavaScript

Hello everyone, I have a collection of JSON objects that are initially set to null in the program like this: var jsonToSaveToDB = [ { ProductID: null, Quantity: null, TotalPrice: null } ]; As the pr ...

I'm having trouble with res.redirect, why isn't it redirecting me as expected?

In my login controller, I have a form that updates the user's scope when they click a button triggering the login() function. .controller('loginCtrl', ['$scope','$http',function($scope,$http) { $scope.user = { ...

Ways to verify every entered word without having to click a button

My goal is to implement real-time word checking in a textarea using JavaScript/Angular. I want to validate each word as users are typing it out. What is the best approach for achieving this? ...

The error handler in AngularJS $http service is always left wanting for a call

Here's the code snippet I'm currently using: $http .post('/api/login', $scope.user) .success(function (data, status, headers, config) { // code }) .error(function (data, status, headers, config) { // code }); It seems to be functi ...

The Bootstrap navigation menu fails to extend the parent div when toggled

When I toggle the button to show the menu on small screens, the menu overflows the parent div with id=contents instead of pushing it down. How can this issue be fixed? Here is the code: <body> <nav id="header" class="navbar navbar-default"& ...

Unable to store cookie using jQuery on Internet Explorer 9

Having trouble setting a cookie on IE9 and can't figure out why. My objective is to create a cookie that expires after a year, using the code below: $.cookie( name, value, { expires:days } ) where days equals 365. However, the cookie disappears as s ...

The innerHTML of null cannot be set in Vue JS

I am attempting to showcase my array and its modifications after applying various methods <template> <div> <div id="example"></div> <div id="example1"></div> </div> </template> <s ...