Include template from file in AngularJS
不知道我是不是搞错了。我无法通过脚本标记包含文件中的模板。有什么想法吗?
模板:
1 2 3 4 5 6 7 8 9 10 11 | <script type="text/ng-template" id="test1">inside <script type="text/ng-template" id="test2" src="templateFile.html"> Select: internal | script inside | script external <ng:include src="tpl"></ng:include> |
控制器:
1 2 3 4 | var myApp = angular.module('myApp', []); function MyCtrl($scope, $templateCache) { $templateCache.put('first.html', 'First template'); } |
jfiddle:http://jsfiddle.net/ag8zy/32/
实际上,stackoverflow上存在所有必需的信息
我试着总结一下:
- ng include无法以这种方式读取SRC
- 从第三方域读取模板应该使用$SCE,而且还有CORS限制。
请看1和2
模板:
1 2 3 4 5 6 7 8 9 | <script type="text/ng-template" id="test1" src="https://tools.ietf.org/html/rfc1918">inside <script type="text/ng-template" id="test2" src="http://mhnystatic.s3.amazonaws.com/angulartest/list.html"> Select: internal | ietf.org | amazonaws <ng:include src="tpl"></ng:include> |
应用程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var myApp = angular.module('myApp', []) .config(function($sceDelegateProvider) { $sceDelegateProvider.resourceUrlWhitelist([ // Allow same origin resource loads. 'self', // Allow loading from outer templates domain. 'https://tools.ietf.org/**', 'http://mhnystatic.s3.amazonaws.com/**' ]); }) .controller('MyCtrl', function($scope, $templateCache, $sce) { $templateCache.put('first.html', 'First template'); $scope.openTemplate = function(id) { var src = document.querySelector('script[id="' + id + '"]').getAttribute('src'); $scope.tpl = $sce.getTrustedResourceUrl(src); }; }); |
jsfiddle:http://jsfiddle.net/glebv/msfbr1xr/15/
但是正如你所看到的,域amazonaws.com可以用来加载资源,但是tools.ietf.org不允许这样做。他们两个都被加入了白名单
您应该使用允许CORS的方法。