angularjs - 作用域上显示的方法未执行

标签 angularjs angularjs-scope angularjs-ng-click angularjs-ng-show

我有一组共享范围的指令

更新:

该代码可在此处作为 plunk 获取 http://plnkr.co/edit/JZ77bsZgGrw6N4K718Is?p=preview

待办事项:

 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;
});

模板:

<div class="ui card">
  <todo-formui ng-show="todo.editMode"></todo-formui>
  <todo-cardui ng-show="!todo.editMode"></todo-cardui>
</div>

有两个指令继承了该指令的范围:

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;
});

模板:

 <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;
});

模板:

<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>

执行代码时,我发现无论我把它放在哪里或尝试做什么,todo-formui中的显示函数都不会执行。相同范围内的保存函数运行没有问题。

最佳答案

在您的预览功能中(如 plunker 中所述),您必须将范围更新为

$scope.todo.editMode = false;

而不是

$scope.editMode = false;

然后就可以预览了

希望这有帮助

关于angularjs - 作用域上显示的方法未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907630/

相关文章:

forms - 在Angularjs中禁用按钮时如何允许ng-click

angularjs - 你如何使 $mdDialog.prompt() 的字段成为必需的

javascript - Angular 冗余数据绑定(bind)?

javascript - 在 Angular 中构建一个宽度为 100% 的可重用 D3.js 图表?

javascript - 在 Angular js中绑定(bind)多个复选框

javascript - 自动建议 20,000 个条目

javascript - 如何在 Directive Link 函数中为变量添加 TemplateURL?

javascript - AngularJS 从按钮单击中选择选项卡

javascript - Angular 的 $scope 中附加抽象层的优点/缺点

javascript - 防止 Angular Ng-Click 上的区域标签页面重新加载