サーバーからのjsonに基づいてフォームを動的に作成するディレクティブを作成しました。私はng-model
属性をさまざまな入力要素に追加しようとしているので、入力値を入力してsubmitをクリックした後に入力値を使用できるようになります。 ng-model
属性が追加されているようですが、双方向データバインディングは機能しません。最初のコンパイル後に作成された要素の双方向バインディングの作成
EDIT:下図のように、私はリンク機能の中からbuildFormを呼んでいる:
function link(scope, elem, attr, ctrl) {
//asyc request to the server, data here is a json object from the server
getMovieDataStructure({
onSuccess: (data) => {
scope.mdb = data;
buildForm(scope.mdb, elem);
},
onFail: (res) => {
console.log("ERROR getting it");
}
});
}
ここでは、ディレクティブ内からのコードの一部である:例えば
//mdb is an array of objects describing the form requirments
function buildForm(mdb, formElement) {
for(var i=0; i < mdb.length; i++) {
if(mdb[i].type == 'string') {
if(mdb[i].maxLength && mdb[i].maxLength > 1024) {
//if maxLength > 1024 put a text area instead
formElement.append(createTextArea({
id: mdb[i].fieldName,
placeholder: mdb[i].fieldName
}));
} else {
//add input field to the form
formElement.append(createTextInput({
id: mdb[i].fieldName,
placeholder: mdb[i].fieldName
}));
}
} else if(){
//some more cases
}
formElement.append("<br>");
}
//...some more code...
}
//one of the functions to create an input element
function createTextInput(data) {
var elem = angular.element("<input>");
elem.attr("type", "text");
elem.attr("id", data.id);
elem.attr("ng-model", data.id);
elem.attr("placeholder", data.placeholder);
return elem;
}
、 htmlページのinput要素の結果は次のようになります。
<input placeholder="movie_name" ng-model="movie_name" id="movie_name" type="text"> </input>
そして、同じタグをhtmlファイルに直接書き込むと、双方向バインディングがうまく機能します。
ここには何が欠けていますか?これを行うには良い方法がありますか、私は物事を過度に複雑化していますか?
あなたはサーバーからデータを取得するために '' '$ http'''を使用している場合、それは更新する必要がありますモデルは見える。 – Nivesh