larry8989
larry8989

Reputation: 339

double curly brackets {{ }} not binding text to h1 element

I am trying to use the $filter service to create a function that returns the lowercase version of characters that are typed in the text field. What am I doing wrong?

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

myApp.controller('mainController', ['$scope', '$filter', function($scope, $filter) {

  $scope.handle = '';

  $scope.lowercasehandle = function() {
    return $filter('lowercase')($scope.handle);
  };

}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp">
  <header>
    <nav class="navbar navbar-default">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">AngularJS</a>
        </div>
        <ul class="nav navbar-nav navbar-right">
          <li><a href="#"><i class="fa fa-home"></i> Home</a></li>
        </ul>
      </div>
    </nav>
  </header>
  <div class="container">
    <div>
      <label>What is your twitter handle?</label>
      <input type="text" ng-model="handle" />
    </div>
    <hr />
    <h1>twitter.com/{{ lowercasehandle() }}</h1>
  </div>
</div>

Upvotes: 1

Views: 788

Answers (2)

Anurag Srivastava
Anurag Srivastava

Reputation: 14413

You have not added the ng-controller directive anywhere. Add it and it works. Also, you can directly use the filter in your html:

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

myApp.controller('mainController', ['$scope', '$filter', function($scope, $filter) {

  $scope.handle = '';

}]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="myApp">
  <header>
    <nav class="navbar navbar-default">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="/">AngularJS</a>
        </div>
        <ul class="nav navbar-nav navbar-right">
          <li><a href="#"><i class="fa fa-home"></i> Home</a></li>
        </ul>
      </div>
    </nav>
  </header>
  <div class="container" ng-controller="mainController"> <!-- Here -->
    <div>
      <label>What is your twitter handle?</label>
      <input type="text" ng-model="handle" />
    </div>
    <hr />
    <h1>twitter.com/{{ handle | lowercase }}</h1>
  </div>
</div>

Upvotes: 1

Bill P
Bill P

Reputation: 3618

You can use the filter directly in the template:

<h1>twitter.com/{{ handle | lowercase }}</h1>

Upvotes: 0

Related Questions