angularjs - remove - ng options not working
La visualización del método en el alcance no se ejecuta (2)
Tengo un conjunto de directivas que comparten un alcance
Actualizar:
El código está disponible como un plunk aquí http://plnkr.co/edit/JZ77bsZgGrw6N4K718Is?p=preview
todo-item:
app.directive("todoItem",function(DeleteTodo,$log){
var dirDefObj = {
restrict:''E'',
templateUrl:''app/templates/todo.html'',
scope:{
todo:''=value''
},
controller:function($scope){},
replace:true
};
return dirDefObj;
});
modelo:
<div class="ui card">
<todo-formui ng-show="todo.editMode"></todo-formui>
<todo-cardui ng-show="!todo.editMode"></todo-cardui>
</div>
Hay dos directivas que heredan el alcance de esta directiva:
todo-cardui
app.directive(''todoCardui'',function(){
var dirDefObj = {
restrict:''E'',
templateUrl:''app/templates/display-todo.html'',
scope:false,
replace:true,
controller:function($scope)
{
$scope.clickDone = function clickDone(){
//two tasks (1)toggle the done value on the todo (2) toggle the btnText on the todo
$scope.todo.done = !$scope.todo.done;
$scope.todo.btnText = $scope.todo.done?''Reinstate'':''Done'';
};
$scope.remove = function remove()
{
DeleteTodo.delete($scope.todo);
$scope.$emit(''todo:deleted'',$scope.todo);
};
$scope.edit = function edit(value)
{
$scope.todo.editMode = true;
$scope.savedState = angular.extend({},$scope.todo);
};
}
};
return dirDefObj;
});
modelo:
<div>
<div class="content">
<i class="right floated blue pencil icon" ng-click="edit()"></i>
<header class="ui medium header">
<span ng-class="{''done-todo'':todo.done,''normal-todo'':!todo.done}">{{todo.task}}</span>
</header>
<div class="description">
<p>{{todo.description}}</p>
</div>
</div>
<div class="extra content">
<button class="ui small green toggle button floated left" ng-click="clickDone()">{{todo.btnText}}</button>
<button class="ui small red button floated left" ng-click="remove()">Delete</button>
</div>
</div>
todo-formui:
app.directive("todoFormui",function(EditService){
var dirDefObj = {
restrict:''E'',
templateUrl:''app/templates/edit-todo.html'',
scope:false,
controller:function($scope){
$scope.display = function display(){
console.log("Inside the edit to preview function");
$scope.editMode = false;
};
$scope.save = function(){
EditService.edit($scope.todo);
};
$scope.discard = function(){
$scope.todo={
task:'''',
dscription:'''',
btnText:''''
};
$scope.todo = $scope.savedState;
};
},
replace:true
};
return dirDefObj;
});
modelo:
<div ng-class="{description:show_modal,content:!show_modal}">
<i class="right floated blue unhide icon" ng-click="display()"></i>
<form class="ui small form">
<div class="field">
<label>Task</label>
<input type="text" name="task" placeholder="What do you want to do?"ng-model="todo.task">
</div>
<div class="field">
<label>Description</label>
<textarea ng-model="todo.description"></textarea>
</div>
<div class="two fields">
<button class="ui red button floated right">Discard</button>
<button class="ui submit green button floated right" ng-click="save()">Save</button>
</div>
</form>
Cuando ejecuté el código, descubrí que la función de visualización en todo-formui no se ejecutaba, sin importar dónde lo colocara o qué intenté hacer. La función de guardar en el mismo ámbito se ejecuta sin problemas.
Es porque el ícono se encuentra debajo de otro elemento html y el evento click no se activa. Agregue un claro después del ícono de "vista previa" (que está flotando) para insertar el formulario donde debería estar. Use un inspector DOM y pronto se dará cuenta del problema.
En su función de vista previa (como se menciona en Plunker), debe actualizar el alcance como
$ scope.todo.editMode = false;
en lugar de
$ scope.editMode = false;
entonces la vista previa estará disponible
Espero que esto ayude