Angularjs 如何在删除数据后重新加载我的应用程序,而不通过下拉菜单丢失所选选项?

Angularjs 如何在删除数据后重新加载我的应用程序,而不通过下拉菜单丢失所选选项?,angularjs,Angularjs,我正在使用AngularJS开发一个学校应用程序,其中我有一个针对所选课程/批次的课程的删除选项。每当我删除课程/批次中的某个类时,该类就会被删除&应用程序会重新加载,但会丢失以保持在显示其余类的同一个选定课程/批次上,而不是从下拉列表中清除选定的课程/批次。 我已经通过许多论坛进行了研究,并试图找到解决方案,因为现在我向一位比我更专业的专家寻求帮助。 在控制器中正确定义了删除类后的My$state。class.config(课程/类)中的URL在删除类后进行检索,但未保留在所选课程/批中。下面

我正在使用AngularJS开发一个学校应用程序,其中我有一个针对所选课程/批次的课程的删除选项。每当我删除课程/批次中的某个类时,该类就会被删除&应用程序会重新加载,但会丢失以保持在显示其余类的同一个选定课程/批次上,而不是从下拉列表中清除选定的课程/批次。 我已经通过许多论坛进行了研究,并试图找到解决方案,因为现在我向一位比我更专业的专家寻求帮助。 在控制器中正确定义了删除类后的My$state。class.config(课程/类)中的URL在删除类后进行检索,但未保留在所选课程/批中。下面我给出了我的控制器和配置文件以及我的页面截图

class.detail.controller.js文件

//Delete Class
    vm.deleteClass = function (cclass) {
        var confirm = $mdDialog.confirm()
        .title('Would you like to Delete ' + cclass.Name + '?')
        .ariaLabel('Class delete Confirmation')
        .cancel('Cancel')
        .ok('Delete');
          $mdDialog.show(confirm).then(function () {
            //_event.loading = true;
            cclass.$delete({ cclassId: cclass.Id }).then(function (data) {
                notify.success('Class deleted');
                 $state.go('triangular-no-scroll.class-management.class',{},  
{reload:true});                   
            }, function () {
                notify.error('Class deleting failed');
            }).finally(function () {
                _event.loading = false;
            });
        });
    };
//Delete Class
    vm.deleteClass = function (cclass) {
        var confirm = $mdDialog.confirm()
        .title('Would you like to Delete ' + cclass.Name + '?')
        .ariaLabel('Class delete Confirmation')
        .cancel('Cancel')
        .ok('Delete');
          $mdDialog.show(confirm).then(function () {
            //_event.loading = true;
            cclass.$delete({ cclassId: cclass.Id }).then(function (data) {
                notify.success('Class deleted');
                $rootScope.$broadcast('courseClass:deleted', cclass);
                 $state.go('triangular-no-scroll.class-management.class',{},  
{reload:false});                   
            }, function () {
                notify.error('Class deleting failed');
            }).finally(function () {
                _event.loading = false;
            });
        });
    };
class.config.js文件

.state('triangular-no-scroll.class-management.class', {
            url: '/course/class',
            templateUrl: 'app/modules/course/class/class.tmpl.html',
            controller: 'ClassController',
            controllerAs: 'vm',
            resolve: {
                courses: function ($stateParams, CourseService) {
                    var data = CourseService.getCourseList();
                    return data;
                }
            }

如果不将应用程序设置为在删除类后刷新,请使用$rootScope.$broadcast将通知设置为Angular,并将需要执行的数据传递到函数中(在我的示例中为'classes')

class.detail.controller.js文件

//Delete Class
    vm.deleteClass = function (cclass) {
        var confirm = $mdDialog.confirm()
        .title('Would you like to Delete ' + cclass.Name + '?')
        .ariaLabel('Class delete Confirmation')
        .cancel('Cancel')
        .ok('Delete');
          $mdDialog.show(confirm).then(function () {
            //_event.loading = true;
            cclass.$delete({ cclassId: cclass.Id }).then(function (data) {
                notify.success('Class deleted');
                 $state.go('triangular-no-scroll.class-management.class',{},  
{reload:true});                   
            }, function () {
                notify.error('Class deleting failed');
            }).finally(function () {
                _event.loading = false;
            });
        });
    };
//Delete Class
    vm.deleteClass = function (cclass) {
        var confirm = $mdDialog.confirm()
        .title('Would you like to Delete ' + cclass.Name + '?')
        .ariaLabel('Class delete Confirmation')
        .cancel('Cancel')
        .ok('Delete');
          $mdDialog.show(confirm).then(function () {
            //_event.loading = true;
            cclass.$delete({ cclassId: cclass.Id }).then(function (data) {
                notify.success('Class deleted');
                $rootScope.$broadcast('courseClass:deleted', cclass);
                 $state.go('triangular-no-scroll.class-management.class',{},  
{reload:false});                   
            }, function () {
                notify.error('Class deleting failed');
            }).finally(function () {
                _event.loading = false;
            });
        });
    };
当程序点击此代码时,将宣布在中设置的消息,相关控制器可以使用Angular$scope.$on捕捉该消息

class.controller.js

 $scope.$on('courseClass:deleted', function (event, data) {
        if (data != null)
            loadClassesByBatchId(data.BatchId);
    });

然后,我们当然可以对想要显示的内容进行编码(在我的例子中,在删除一个类后,按选定的批处理ID加载其余的类)。

在localStorage中设置模型数据,希望您将使用redux,您只需将数据放在状态树中,如果没有,就让它流动,然后希望您将数据保存在服务中,并且您的控制器可以从服务中读取数据,如果没有,则希望您可以从routes resolve子句中读取数据localstorage并将其注入控制器。如您所建议的,感谢@dayan,localstorage做到了这一点,但是我发现了一种非常简单的方法来完成这一点,如下面的答案所示。。