Подтвердить что ты не робот

Angularjs меняет шаблон просмотра после нажатия ссылки

Я пытаюсь изменить html-шаблон после нажатия ссылки. Значение логическое, начальное значение истинно и соответствующий шаблон загружен, но когда значение изменилось на false, новый шаблон не загружен, я не знаю причины. Когда начальное значение boolean истинно, другой шаблон загружен успешно, но по методу, который называется not. Пожалуйста помоги. Вот мой код:

TaskCtrl

app.controller('TasksCtrl', ['$scope', 'TaskService', function ($scope, TaskService) {
    // initialize function
    var that = this;
    that.newTask = true;
    that.name = "My name is Nedim";

    that.templates = {
        new: "views/task/addTask.html",
        view: "views/task/viewTask.html"
    };

    // load all available tasks
    TaskService.loadAllTasks().then(function (data) {
        that.items = data.tasks;
    });

    $scope.$on('newTaskAdded', function(event, data){
        that.items.concat(data.data);
    });

    that.changeTaskView = function(){
        that.newTask = false;
        console.log("New task value: " + that.newTask);
    };

    return $scope.TasksCtrl = this;

}]);

task.html

<!-- Directive showing list of available tasks -->
<div class="container-fluid">
<div class="row">
    <div class="col-sm-6">
        <entity-task-list items="taskCtrl.items" openItem="taskCtrl.changeTaskView()"></entity-task-list>  
    </div>
    <div class="col-sm-6" ng-controller="TaskDetailCtrl as taskDetailCtrl">
        <!-- form for adding new task -->
        <div ng-if="taskCtrl.newTask" ng-include="taskCtrl.templates.new"></div>
        <!-- container for displaying existing tasks -->
        <div ng-if="!taskCtrl.newTask" ng-include="taskCtrl.templates.view"></div>

    </div>
</div>

директива entityList

app.directive('entityTaskList', function () {
return {
    restrict: 'E',
    templateUrl: 'views/task/taskList.html',
    scope: {
        items: '='
    },
    bindToController: true,
    controller: 'TasksCtrl as taskCtrl',
    link: function (scope, element, attrs) {
    }
};

});

шаблон директивы

<ul class="list-group">
<li ng-repeat="item in taskCtrl.items" class="list-group-item">
    <a ng-click="taskCtrl.changeTaskView()">
        <span class="glyphicon glyphicon-list-alt" aria-hidden="true"> </span> 
        <span>{{item.name}}</span>
        <span class="task-description">{{item.description}}</span>
    </a>
</li>

{{TaskCtrl.newTask}}

4b9b3361

Ответ 1

Без плункера или JSFiddle я не могу точно сказать, но это может быть проблема с ng-if. Я думаю о двух обходных решениях.

Сначала я думаю, что лучше. Используйте только 1 ng-include и изменяйте только шаблон.

HTML:

<entity-task-list items="taskCtrl.items" openItem="taskCtrl.changeTaskView('view')"></entity-task-list>
...
<div ng-include="taskCtrl.currentTemplate"></div>

JS:

that.currentTemplate = that.templates.new;
...
that.changeTaskView = function(template) {
    that.currentTemplate = that.templates[template];
};

Или, если вам не нравится это решение, попробуйте ng-show вместо ng-if. С ng-show элементы будут отображаться с помощью свойства display: none; при загрузке страницы, а при ng-if они будут отображаться, когда переданное значение true.

Надеюсь, это поможет вам.