Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

template call inside ngView not support angular directive stackoverflow

My question involves how to use AngularJS directives in the template called inside ngView in an AngularJS application.

Define :
The application is single-page, so it loads an index.html that contains a div element(template url) in the DOM with the ng-view attribute.

Main Page(index.html) :

<html data-ng-app="App" data-ng-controller="AppCtrl">
  <head>
    <title>Angular App</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
    <script src="js/app.js"></script> 
  </head>
<body>
<!-- primary nav -->
<a href="#/page1">Page 1</a>
<a href="#/page2">Page 2</a>
<a href="#/page3">Page 3</a>

<!-- display the view -->
<div ng-view>
</div>
</body>
</html>

app.js :

angular.module('App', [])

.controller('AppCtrl', function($rootScope, appLoading) {
    $rootScope.topScope = $rootScope;
    $rootScope.$on('$routeChangeStart', function() {
      appLoading.loading();
    });
  })

.config(function($routeProvider) {
    $routeProvider.when('/page1', {
      controller : 'Page1Ctrl',
      templateUrl : 'page1.html'
    })
    .when('/page2', {
      controller : 'Page2Ctrl',
      templateUrl : 'page2.html'
    })
    .when('/page3', {
      controller : 'Page3Ctrl',
      templateUrl : 'page3.html'
    })
    .otherwise({
      redirectTo: '/home'
    });
  })

page1.html :

<div class="form">
<form class="login-profile" method="post" action="" name="editfrm">
<input type="text" name="email" value="" id="txtemail" data-ng-model="email" required>
<input type="password" name="password" value="" id="txtpassword" data-ng-model="password" required>
<input type="button" value="Save" name="submit">
</form>
</div>

Problem : Template Url called inside the ngView not supported any AngularJS deirective. data-ng-model="email" & data-ng-model="password" not working when called in the ngView on click the link <a href="#/page1">Page 1</a>

Any help will be appreciated. Thanks

like image 354
Creative Learner Avatar asked Dec 13 '25 22:12

Creative Learner


1 Answers

Without seeing code for your Page1Ctrl it's hard to tell but it seems like you are trying to share data between controllers using $rootScope, no?

Well, just don't. Use either $routeParams or a service for that purpose. For example:

// app controller   
.controller('AppCtrl', function(User) {
  User.set({email:'email', password:'password'}); // set user
})

// page 1 controller
.controller('Page1Ctrl', function($scope, User) {
  $scope.user = User.get(); // get user
})

// user service      
.service('User', function() {
  var user = null;
  return {
    get: function() {
      return user;
    },
    set: function(val) {
      user = val;
    }
  };
});

and related HTML

<input type="text" 
       name="email" 
       data-ng-model="user.email" 
       required>
<input type="password" 
       name="password" 
       data-ng-model="user.password" 
       required>
like image 129
Mikko Viitala Avatar answered Dec 15 '25 11:12

Mikko Viitala



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!