This is my angular js file
test.js file:
var app = angular.module("angleapp", [])
.controller('MainController', ['$scope', function ($scope) {
$scope.test = "hi all"
}])
.directive('programlisting', function () {
return {
restrict: 'E',
scope: {
},
templateUrl: '/directives/test.html'
};
});
test.html file:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
alert("stop");
</script>
</head>
<body>
hi how are you
</body>
</html>
This is my index file:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script src="/directives/test.js"></script>
</head>
<body data-ng-app="angleapp">
<div class="main" ng-controller="MainController">
<programlisting></programlisting>
</div>
</body>
</html>
Now when I try to run this
hi how are you
is coming in the output. but the alert window does not pop-op where i am i going wrong?
In partials html page(test.html), No need to write doctype, head and body tags. Just write your html elements and script. It should work.
The problem is that
script
tags are not executed by browser automatically when injected withinnerHTML
(what happens in case oftemplateUrl
). Normally this tags are evaluated programmatically (eval
). jQuery does it but jqLite (internal jQuery-like implementation of Angular) does not.In your case the fix is simple, move jquery script tag before angular, then Angular will use jQuery for DOM manipulations:
Also, you need to clean up your
test.html
template, leave only body content. This is howtest.html
should look:And finally, I don't know why you need to have script tag inside of partial template, but in most cases this is bad idea, and there are better approaches.