2016-08-12 54 views
0

我有一個簡單的應用程序,它顯示任務。我想雙擊一個任務來編輯它,所以我希望它從<span>更改爲<input type="text" />。這裏是我的代碼:更改只有一個跨度輸入ng內部重複

<li ng-repeat="task in tasks"> 
    <input type="checkbox" ng-checked="task.done" ng-click="taskDone(task.id, !task.done)"/> 
    <span ng-dblclick="editTask()" ng-if="!editable">{{::task.task}}</span> 
    <input type="text" ng-if="editable" value="{{task.task}}" /> 
</li> 

但是,當我在一個任務雙擊,每<span>變化<input type="text" />

enter image description here

下面是一個指令,它生成的HTML代碼:

export const tasksList = function() { 
    return { 
     restrict: 'E', 
     scope: { 
      tasks: "=" 
     }, 
     templateUrl: '../dist/views/tasksList.html', 
     link: function(scope, element, attrs) { 
      scope.$watchCollection('tasks', function(tasks) { 
       scope.updateTasks(); 
      }); 
     }, 
     controller: function($scope) { 
      const self = this; 
      $scope.editable = false; 
      $scope.editTask = function() { 
       $scope.editable = true; 
      }; 
      $scope.updateTasks = function() { 
       self.tasks = $scope.tasks; 
      }; 
      $scope.taskDone = function(id, taskDone) { 
       $scope.tasks[id].done = taskDone; 
      }; 
     }, 
     controllerAs: "$ctrl" 
    }; 
}; 

如何更改<span><input type="text" />

+0

顯示你的js請 –

+0

這將是更容易,如果你提供一些代碼.. – hsz

+0

綁定所有的'editable'屬性到'$ index'或任務的ID。 – thepio

回答

3

試着把editable標誌放在任務上,而不是範圍。

<li ng-repeat="task in tasks"> 
    <input type="checkbox" ng-checked="task.done" ng-click="taskDone(task.id, !task.done)"/> 
    <span ng-dblclick="editTask(task)" ng-if="!task.editable">{{::task.task}}</span> 
    <input type="text" ng-if="task.editable" value="{{task.task}}" /> 
</li> 

... 
$scope.editTask = function(task) { 
    task.editable = true; 
}; 
...