I am just learning Angularjs, and how to use templateUrl to load a template.
I have a simple directive:
var mainApp = angular.module(\"mainApp\", [])
If you have Node and NPM installed then run: npm install http-server -g
Then navigate to the folder containing your app and run: http-server
I found my answer in this SO post: Quick Node Server
You can download Node here (NPM comes with Node): Node
Hope this helps!
The problem is that you are running your example off the file system (using the file://
protocol) and many browsers (Chrome, Opera) restricts XHR calls when using the file://
protocol. AngularJS templates are downloaded via XHR and this, combined with the usage of the file://
protocol results in the error you are getting.
You've got several options when it comes to resolving this situation:
<script>
directive: http://docs.angularjs.org/api/ng.directive:script so your templates are downloaded with the main HTML file and it is no longer necessary to load them via XHRfile://
protocol. For example this can be done in Chrome like so: Allow Google Chrome to use XMLHttpRequest to load a URL from a local fileChrome does not allow ajax requests on the file:
protocol.
Take a look at: Google Chrome --allow-file-access-from-files disabled for Chrome Beta 8 for a workaround, or you could run a web server on your computer.
You can also use the expressjs web server to load your index.html file.
Install express server
npm install express -S
server.js file
const express = require('express')
const path = require('path');
const app = express();
load angularjs files by specifying the path
NOTE: Assuming your angular files( module/controller/directive files and the index.html file) are inside a public directory.
app.use(express.static(path.join(__dirname, 'public')));
listen (start app with node server.js)
app.listen(8080, () => console.log('App listening on port 8080'));
package.json file
{
"scripts": {
"dev": "node server.js"
},
"dependencies": {
"express": "^4.16.4"
},
}
Run npm run dev
to start server.
public/index.html file
<!DOCTYPE html>
<html ng-app="mainApp">
<head>
<script src="js/jquery-2.0.0.js"></script>
<script src="js/angular.js"></script>
<link href="css/bootstrap.css" rel="stylesheet" />
<script src="js/bootstrap.js"></script>
<script src="js/main.js"></script>
<style type="text/css">
div {
background-color: cornflowerblue;
}
#appPanel {
width: 900px;
height: 1000px;
}
</style>
</head>
<body>
<div id="appPanel" class="container">
<div class="row-fluid" style="height: 15%">
<div class="span12">
title
</div>
</div>
<div class="row-fluid" style="height: 85%">
<div class="span3" style="height: 100%">
actions
</div>
<div class="span9" style="height: 100%" ng-controller="AppCtrl">
<div ng-repeat="request in data.requests">
<request data="request"></request>
</div>
</div>
</div>
</div>
</body>
</html>