2015-10-12 63 views
0

我正在使用ngMessages進行表單驗證。我面臨的問題是,我的html是由javascript動態創建的,angular.message.js在此之前加載。所以我想在所有動態HTML元素被創建時觸發ngMessage。從哪裏啓動角度的ngMessages指令,我可以手動啓動它嗎?

+0

這聽起來像是你的做法是完全錯誤的。幾乎沒有理由超出角度來生成DOM元素,並且當你這樣做時,它應該被隔離到可以被編譯成角度的指令。沒有一個你想要做什麼的堅實範例,你爲什麼必須走出去,沒有解決你所描述的情況的方法。 – Claies

+0

除此之外,你的措辭表明了對角度如何操作的誤解。 Angular *是* JavaScript,所以說你正在創建HTML「由JavaScript動態地」是一種氣味,你只是不知道如何有角度地幫助你完成任務。 – Claies

+0

我正在製作一個formbuilder,其中HTML是由JavaScript動態生成的。每當用戶拖放一個元素。我將這些HTML元素保存爲JSON格式,並使用角度清理器將其呈現爲HTML格式。我試圖弄清楚這個錯誤,我大概知道我的ngmessages模塊首先被加載,然後ngsanitize被渲染。 –

回答

0

A ngMessages指令通過在數據綁定中使用的form,$rootScope$scope對象中的更改進行初始化。 ngMessage指令用於綁定到父節點,並且每個ngMessages指令都用於綁定到值爲truefalse的特定子項。

使用以下過程:

  • 一種過濾器中注入,其中將所生成的HTML模板字符串和其ID到templateCache
  • 的條件在過濾器中的過濾器的templateCache
  • 的條件其將由ngMessages指令指定的密鑰的值設定爲true

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

 
<script> 
 
    angular.module('foo', ['ngMessages']); 
 
</script> 
 

 
<script> 
 
function bop(model, view) 
 
{ 
 
var i = 0, len = 100000, buz = ""; 
 
    
 
for (i; i < len; i++) 
 
    { 
 
    buz = buz.concat(i); 
 
    } 
 
    
 
bop.cache.put('listContent', buz); 
 
view.loaded = true; 
 
    
 
return model; 
 
} 
 

 
function baz($templateCache) 
 
    { 
 
    bop.cache = $templateCache; 
 
    
 
    return bop; 
 
    } 
 

 
baz.$inject = ['$templateCache','$rootScope']; 
 

 
angular.module('foo').filter('baz', baz); 
 
</script> 
 

 
<div ng-app="foo"> 
 
    <form name="myForm"> 
 
    <label>Check Me<input type="checkbox" ng-model="$root['required']"></label> 
 
    <div ng-include="'listContent' | baz:myForm"></div> 
 
    <div ng-messages="$root" style="color:green" role="alert"> 
 
    <div ng-message="required"></div> 
 
    </div> 
 
    <div ng-messages="myForm"> 
 
    <div ng-message="loaded" style="color:blue">Loaded</div> 
 
    </div> 
 
    
 
</div>

參考

相關問題