2015-02-23 75 views
4

我试图创建一个脚本类型的文本/ ng-template来将我的错误消息模板放入$ templateCache中。我想要这个脚本文件是远程的,在它自己的文件之外的HTML。ng-messages-AngularJS ng模板包括

<script type="text/ng-template" id="error-messages"> 
    <span ng-message="required">This field is required.</span> 
    <span ng-message="min">This number must be larger than {{min}}.</span> 
    <span ng-message="max">This number must be smaller than {{max}}.</span> 
    <span ng-message="number">A number is required.</span> 
    <span ng-message="date">A date is required.</span> 
</script> 

然后在HTML我要引用此模板,我认为应该在$ templateCache,我可以凭身份证访问它。

<form name="userForm">  
     <div class="form-group"> 
     <label for="requiredInput">Required</label> 
     <input type="text" class="form-control" id="required" name="requiredInput" 
     ng-model="user.required" required /> 
     <div ng-messages="userForm.requiredInput.$error" ng-messages-include="error-messages"></div> 
     </div> 
</form> 

如果我把脚本内嵌HTML,它工作得很好,但我希望它在远程文件中。当我将它移动到远程文件时,我的HTML无法找到我的模板错误消息。

这是我第一次分享的Plunker。请让我知道,如果你不能得到它。 http://plnkr.co/edit/NgSm7piaECWBab1LOmp3?p=preview

+1

如果是远程无需脚本标记,则存储为html文件 – charlietfl 2015-02-23 16:59:11

+0

感谢您的及时回复。我希望将它保存在一个脚本标记中,该脚本标记在我们的minify/uglify过程中被捆绑。而不是使用ng-message-include =“app/module/feature1/errorMessages.html”我希望它很简单ng-message-include =“error-messages”只是模板的id。 – Harbinger 2015-02-23 17:21:55

+0

好吧,你不能有它的两种方式,如果角度没有找到它的ID它使一个AJAX请求,如果路径无效 – charlietfl 2015-02-23 17:25:25

回答

12

请检查plunker - http://plnkr.co/edit/luhUuZURCOeHSuEhi11x?p=info

angular.module('app', ['ngMessages']) 
.run(function ($templateCache, $http) { 
    $http.get('scriptTemplate.html') 
    .then(function(response) { 
    $templateCache.put('error-messages', response.data); 
    }) 
}) 

装入NG的消息,包括模板的应用程序的运行阶段,使用$ HTTP,并将其保存在templateCache。

+0

谢谢你,我正在向$ templateCache路径前进,以获得我想要的结果。很好的使用承诺:-) – Harbinger 2015-02-23 18:38:40

+1

它不起作用。或者我错过了一些东西。 – Eugene 2015-05-20 13:57:00

+0

不错的解决方案,我也喜欢使用这种方法,因为我可以重新使用模板的ID,每当消息的路径发生变化时(在开发过程中我们都知道这可能发生),您只需要在一个位置更改它:) – 2016-04-19 09:48:02