Simple ng-include not working

JavascriptHtmlAngularjsAngularjs Scope

Javascript Problem Overview


Im playing with AngularJS for the first time, and im struggling to use ng-include for my headers and footer.

Here's my tree:

myApp
assets
   - CSS
   - js
        - controllers
        - vendor
             - angular.js
             - route.js
             ......
             ......
             ......
        main.js
pages
   - partials
        - structure
              header.html
              navigation.html
              footer.html
   index.html
   home.html

index.html:

<!DOCTYPE html>
<html ng-app="app">
<head>
	<title>AngularJS Test</title>

	<script src="/assets/js/vendor/angular.js"></script>
	<script src="/assets/js/vendor/route.js"></script>
	<script src="/assets/js/vendor/resource.js"></script>
	<script src="/assets/js/main.js"></script>

</head>
	<body>    		

		<div ng-include src="partials/structure/header.url"></div>
		<div ng-include src="partials/structure/navigation.url"></div>    

		<div id="view" ng-view></div>	

		<div ng-include src="partials/structure/footer.url"></div>
    </body>
</html>

main.js

var app = angular.module("app", ["ngResource", "ngRoute"]);


app.config(function($routeProvider) {

$routeProvider.when("/login", {
	templateUrl: "login.html",
	controller: "LoginController"
});

$routeProvider.when("/home", {
	templateUrl: "home.html",
	controller: "HomeController"
});

$routeProvider.otherwise({ redirectTo: '/home'});

});

app.controller("HomeController", function($scope) {
    $scope.title = "Home";
});

home.html

<div>
<p>Welcome to the {{ title }} Page</p>
</div>

When i go on the home.html page, my header, nav and footer are not appearing.

Javascript Solutions


Solution 1 - Javascript

You're doing an include of header.url instead of header.html. It looks like you want to use literals in the src attribute, so you should wrap them in quotes, as was mentioned in the comments by @DRiFTy.

Change

 <div ng-include src="partials/structure/header.url"></div>
 <div ng-include src="partials/structure/navigation.url"></div>    

 <div id="view" ng-view></div>   

 <div ng-include src="partials/structure/footer.url"></div>

to

 <div ng-include src="'partials/structure/header.html'"></div>
 <div ng-include src="'partials/structure/navigation.html'"></div>    

 <div id="view" ng-view></div>   

 <div ng-include src="'partials/structure/footer.html'"></div>

If this is not working, check the browser console if there are any 404's

Solution 2 - Javascript

I had a similar problem with a simple ng-include not rendering:

<div ng-include="views/footer.html"></div>

I wrapped the file path in single quotes and it now renders:

<div ng-include="'views/footer.html'"></div>

Solution 3 - Javascript

i had a similar problem that landed me here.

ng-include was not populating the contents of my partial, but there were no console errors, nor 404's.

then i realized what i did.

fix for me: make sure you have ng-app outside of the ng-include! so obvious. the price of being an Angular noob.

Solution 4 - Javascript

I also came across this issue. And this is what worked for me.

So instead of writing this:<div ng-include="'html/form.htm'"></div>

You want to add ng-app="". So it should look like this: <div ng-app="" ng-include="'html/form.htm'"></div>

Solution 5 - Javascript

I was struggling with the same issue and have done almost all what was advised in different stacks but it didn't work for me. On Console, I was getting the Error:

"Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource."

Later I realised, I have to use a local web server (MAMP, WAMP etc.) to make it work.

Please be careful of the above error message. Chances are you are not using a local web server to run you website.

Solution 6 - Javascript

I just figured this one out!

For me, I was using a CDN for importing my angular.min.js file that apparently wasn't working. I switched to:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>

and included ng-app="" in my body tag:

<body ng-app="">
<div ng-include="'testfile.html'"></div>

and it's working fine now. Cheers!

Solution 7 - Javascript

Yes, without the '', ng would try to evaluate the contents inside the ng-include("")

This evaluation is another reason why you don't put {{}} inside these directives.

Solution 8 - Javascript

ng-include is not working in chrome as well as in explorer but works in Firefox, so this could be compatibility issues. To be sure, try generating the report in Firefox or Edge or another browser.

Solution 9 - Javascript

I Too had similar issue: Silly mistake was causing IT , I had below textArea EG:

<textarea cols="3" type="text" id="WarehouseAddress"  class="form-control" > `

Wasn't closed properly Corrected below :

<textarea cols="3" type="text" id="WarehouseAddress"  class="form-control" ></textarea> 

<div ng-switch="vm.frmDOA.isGenerateDebitNote">
                <ng-include src="vm.showupload()"></ng-include>
            </div>
  

Thought to post it may help any one I digged hours to solve ....

Solution 10 - Javascript

the ng-include file works for files fetched from the web server only (needs something like http://mywebsite/myinclude.html link). It does not work if you fetch file from local folder directly (c:\myinclude.html will not work)

Solution 11 - Javascript

The ng-include directive should just work normal if you're viewing your file via some server (localhost or online) and NOT viewing your file directly under file system like (file:///yourpath/index.html).

This example from w3schools should work fine.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOam PsyView Question on Stackoverflow
Solution 1 - JavascriptPieter HerroelenView Answer on Stackoverflow
Solution 2 - JavascriptcfranklinView Answer on Stackoverflow
Solution 3 - JavascriptGraehamFView Answer on Stackoverflow
Solution 4 - JavascriptTim AnishereView Answer on Stackoverflow
Solution 5 - JavascriptMuhammad Ali MansoorView Answer on Stackoverflow
Solution 6 - JavascriptFiringBlanksView Answer on Stackoverflow
Solution 7 - JavascriptAchuth IView Answer on Stackoverflow
Solution 8 - JavascriptHimesh V RView Answer on Stackoverflow
Solution 9 - JavascriptSunil PandeyView Answer on Stackoverflow
Solution 10 - JavascriptJames DsouzaView Answer on Stackoverflow
Solution 11 - JavascriptzeeawanView Answer on Stackoverflow