如何使用AngularJS在单击时将文本元素更改为输入字段?

Pau*_*aul 0 javascript angularjs

我想知道如何在AngularJS中完成这项工作.

拥有此关键字列表和旁边的编辑按钮.

    <tr ng-repeat="keyword in keywords">
        <td>
            <strong id="keyword.name">{{ keyword.name }}</strong>
        </td>
        <td>
            <button ng-click="editKeyword(keyword.name)">Edit</button>
            <button ng-click="deleteKeyword(keyword.name)">Delete</button>
        </td>
    </tr>
Run Code Online (Sandbox Code Playgroud)

现在在我的控制器中,我有类似的东西.

$scope.editKeyword = function(name){
    console.log(name);
    //something done to change the <strong> element into a text input
};
Run Code Online (Sandbox Code Playgroud)

如何通过控制器将"强"元素替换为文本输入字段.这可以在angularJS中完成吗?

谢谢您的帮助.

Dav*_* H. 9

正如查理所提到的,ng-if会做的.还有'ng-switch',它完全是针对这种情况而制作的.

<tr ng-repeat="keyword in keywords">
    <td ng-switch="mode[$index]">
        <input ng-switch-when="edit" id="edit" ng-model="keyword.name">
        <strong ng-switch-default id="keyword.name">{{ keyword.name }}</strong>
    </td>
    <td>
        <button ng-click="editKeyword(keyword.name, $index)">Edit</button>
        <button ng-click="deleteKeyword(keyword.name)">Delete</button>
    </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

控制器看起来像:

$scope.editKeyword = function(name, index){
    $scope.mode[index] = "edit";
    console.log(name);
    //something done to change the <strong> element into a text input
};
Run Code Online (Sandbox Code Playgroud)

并且在完成编辑后将$ scope.mode [index]更改为其他任何内容.


cha*_*tfl 7

最简单的方法是直接在模板中使用 ng-if

<td>
     <strong id="keyword.name" ng-if="!editMode">{{ keyword.name }}</strong>
     <span ng-if="editMode">
        <input ng-model="keyword.name">
        <button ng-click="save(keyword); editMode = false">Save</button>
     <span>
</td>
<td>
    <button ng-click="editKeyword(keyword); editMode = true">Edit</button>
    <button ng-click="deleteKeyword(keyword)">Delete</button>
</td>
Run Code Online (Sandbox Code Playgroud)