私はAngular jsディレクティブを使用しており、データをバインドしてビューに表示しています。私は条件付きビューを持っています。データの読み取りと編集に同じビューを使用しています。フラグ edit=true を管理し、ng-switch on flag "edit" を使用してビューを変更します。
ほとんどの場合、うまく機能します。しかし、バックグラウンドのデータが更新されても、一部のビューが更新されないことに気付きました。私が基本的にしていること; 編集モードで「OK」ボタンをクリックしたとき。ng-click を使用して、フラグ edit=undefined を変更しました。データが変更されるため、ビューが変更されると思います。それは確かにほとんどの場合機能しますが、突然機能しなくなります。データを印刷してコンソールを確認したところ、ng-click が実際にフラグを正しく更新していることがわかります。以下はコードの抜粋です。
ビュー コード* [更新] *:
<!--In case of edit render it as text box-->
<ng:switch on="file.edit">
<div ng:switch-when="true">
<input type="text" ng-model="file.name" class="file-label" value="{{file.name}}" />
<i class="icon-ok" ng-click="addFile({{$index}})"></i>
<i class="icon-remove" ng-click="cancelAddFile({{$index}})"></i>
</div>
<div ng:switch-when="undefined">
<!--if it is not edit case then render as label-->
<!--Add file name as a label-->
<span class="file-label" >{{file.name}}</span>
</div>
</ng:switch>
以下はディレクティブ コードの抜粋です* [更新] *。
//project directive as element for project contents
app.directive("projectcontents", ['Contents', function (projectContents) {
return {
restrict: "E",
templateUrl: "/xopus/view/projectstructure/ProjectContents.html",
replace: true,
scope: {
project: '='
},
link: function (scope, element, attrs) {
/*Edit file in project*/
scope.editFile = function (fileIndex) {
//print log for debug purpose
console.log("Edit file at index " + fileIndex);
//make service call
//update edit flag
scope.files[fileIndex].edit = true;
};
/*Remove file in project*/
scope.deleteFile = function (fileIndex) {
//make service call
//print log for debug purpose
console.log("Remove file at index " + fileIndex);
//Remove this file entry form data model
scope.files.splice(fileIndex, 1);
};
/*Add file in project*/
scope.addFile = function (fileIndex) {
//print log for debug purpose
console.log("Add file at index " + fileIndex);
//make service call
//update data binding to update edit=false
//update edit flag
scope.files[fileIndex].edit = undefined;
};
/*Cancel add file */
scope.cancelAddFile = function (fileIndex) {
//print log for debug purpose
console.log("Cancel file at index " + fileIndex);
//Remove this file entry form data model
scope.files.splice(fileIndex, 1);
};
}
};
} ]);
私はまだAngularを学んでおり、基本的な間違いを犯していると確信しています。助けてください。