2015-09-11 13 views
0

參考這個例子中的字段:http://jsbin.com/cenugiziju/edit?html,js,output需要從一個指令字段類型

我已經創建了一個指令:example-directive 該指令是由具有一個標籤和該HTML文件中的輸入的templateUrl的。該字段在vm.formFields內標記爲required

如果您在窗體部分查看,您會注意到$valid已被設置爲true,即使未填充所需的指令。我本以爲這是false

有沒有一種方法可以讓Formly require字段從自定義指令中引入,該指令上有字段?

+0

當您設置不需要的字段時或不需要該項目...你需要告訴它何時需要... like require:'^ ngModel'或require:'^ form',這允許你在指令中的鏈接函數中使用它... https://docs.angularjs.org/guide/directive,你需要根據需要設置字段... ps您的示例有點麻煩... formmaly-form指令在哪裏? –

+0

我會看看你的鏈接的東西。謝啦。 formly-form指令來自html字段中包含的formly.js腳本。 – Holt

+0

@ Jony-Y這是否需要:'^ ngModel'進入指令本身?它需要的東西是主頁上的控制器嗎?或主頁面上的表單(在這種情況下是'vm.formName')? '鏈接'設置兩個項目如何相互溝通? – Holt

回答

2

ok 對於混音和延遲感到抱歉。 我已經創建了你正在尋找的答案。 ,因爲你輸入了一個指令,你實際上需要用你需要的值把選項發送給那個指令...... 這是一個工作的例子......這意味着儘管你自己需要處理所有的驗證等等,你是不是產生通過FormalyJS但在自己的指令中的元素(請確保沒有其他的方式來做到這一點...)

這是糾正代碼所需/最大長度/ MINLENGTH到:

jsbin

我實際上做的是將Formly的選項傳遞給我的指令並添加驗證

app.directive('exampleDirective', function() { 
return { 
    templateUrl: 'example-directive.html', 
    scope:{ 
    options:'=options', 
    ngModel:'=ngModel' 
    }, 
    link:function(scope, element, attrs){ 
    scope.isRequired = scope.options.templateOptions.required; 
    scope.minValue = scope.options.templateOptions.min; 
    scope.maxValue = scope.options.templateOptions.max; 
    } 
}; 

});

<script type="text/ng-template" id="example-directive.html"> 
    <div class="form-group"> 
    <label for="{{::id}}">{{options.templateOptions.label}}</label> 
    <input id="{{::id}}" name="{{::id}}" class="form-control" ng-model="ngModel" ng-required="isRequired" ng-minLength="{{minValue}} ng-maxLength={{maxValue}}"/> 
    </div> 
</script> 

這是除了vm.formFields 模板的模板:「」

所以現在,當你想添加一個字段,您需要將數據傳遞給指令,並在指令添加相應的代碼... 我不是巨大熟悉Formly,但是這是我可以給你

注意解決方案:我通過選擇項目 的指令,因爲這是FormalyJS如何構造它。 ...你可以隨時使用你自己的...但因爲它呈現後formly指令,想通它會更容易

編輯

這裏是一個更新的JSBIN

你可以看到,我不得不添加到該指令ngModel ......你也可以做到這一點通過需要然後使用它,我喜歡這樣做...但你必須將它傳遞給定義指令的div ... 結帳更新的代碼

+0

感謝您的回答!我可以看到它在jsbin上工作正常,但是當我將這個邏輯應用到我的項目中時,我得到一個錯誤,當'options'在'link'函數中運行代碼時'options'未定義('scope.options .template ....')。我將'options'屬性添加到div。我假設在那裏添加'options'就是將所有與選項相關的東西發送給指令。我誤解了這是如何工作的? – Holt

+0

你想給我一個例子,我幫你解決它嗎?您需要在指令中定義選項,告訴它將formlyjs中的選項綁定到獨立的指令範圍。選項數據是編譯字段(或我們的例子中的vm.formFields)後返回的formlyjs,你總是可以使用你自己的並傳遞它們...所以我們將一個新的作用域變量添加到名爲options和bind的指令中它與您發送給formlyjs的數據...但要幫助更多我需要看看事情崩潰 –

+0

我仍然在調查這個問題(我會試圖找出之前,我要求幫助,因爲我以這種方式學習更好)。然而,看着你提供的jsbin ...我是否需要將指令中的驗證返回到主窗體?它加載的形式是'$ invalid'(這很好),但是如果你輸入數據到字段中,表單仍然認爲它是'$ invalid'。我會假設我需要將驗證或其他內容冒泡到表單中,以便相應地更新'$ valid/$ invalid/etc'字段。 – Holt

相關問題