Javascript 更改视图AngularJS时,控制器中的我的数据列表为空

Javascript 更改视图AngularJS时,控制器中的我的数据列表为空,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,我不明白为什么,但在Angular controller中我有一个列表,如果我成功保存了文件,我想转到另一个页面,那里会显示我保存的文件列表。我把名字放在列表中,一切正常,但当我更改html/根目录时,他们可能会删除所有列表。我对两个html页面使用相同的控制器 控制器: $scope.imenaFajlova = []; $scope.continueFileUpload=function (){ for (var i = 0;i<(file.files.length

我不明白为什么,但在Angular controller中我有一个列表,如果我成功保存了文件,我想转到另一个页面,那里会显示我保存的文件列表。我把名字放在列表中,一切正常,但当我更改html/根目录时,他们可能会删除所有列表。我对两个html页面使用相同的控制器

控制器:

  $scope.imenaFajlova = []; 
  $scope.continueFileUpload=function (){
     for (var i = 0;i<(file.files.length);i++) {
         $scope.nameFile.push(file.files[i].name);
     }

     $http({
            method: 'POST',
            url: uploadUrl,

         })
           .success(function(data, status) {  
               document.getElementById("fromFileUpload").reset();
               $location.path('/success');
           })
           .error(function(data, status) {
           });
 };

当更改根url时,如何将日期发送到另一个视图或保存数据?

您可能应该使用一个服务来处理页面之间的数据移动,而不是使用同一个控制器

angular
    .module('myApp')
    .controller('NamesController', NamesController);

    function NamesController($scope, namesFactory) {

        namesFactory.pushNames("Ante");
        console.log(namesFactory.getNames()); // prints ["Ante"] to the console

        $scope.names = namesFactory.getNames();

    }

您可以阅读有关服务的信息。

使用同一控制器并不意味着它共享同一控制器实例。它们要么需要有一个公共父级(未重新初始化),要么将数据存储在工厂/服务中并从那里读取。

正如其他人建议的那样,您应该使用工厂或服务

如果是工厂,你首先写一个工厂

angular
    .module('myApp')
    .factory('namesFactory', namesFactory);

    function namesFactory() {

        var names = [];

        return {
            pushNames: pushNames,
            getNames: getNames
        };

        function pushNames(x) {
            names.push(x);
        }

        function getNames() {
            return names;
        }

    }
然后将工厂依赖项注入控制器,并使用控制器内部工厂中的方法

angular
    .module('myApp')
    .controller('NamesController', NamesController);

    function NamesController($scope, namesFactory) {

        namesFactory.pushNames("Ante");
        console.log(namesFactory.getNames()); // prints ["Ante"] to the console

        $scope.names = namesFactory.getNames();

    }
对于ng repeat,您将使用以下内容

<ul>
     <li ng-repeat='name in names'>{{name}}</li>
</ul>
  • {{name}

每次更改视图时都会重新创建控制器。使用服务代替感谢您的建议。。。当然我需要使用这项服务。是的,现在名单上有名字。。。但是还有一个问题<代码>工厂('namesService',['$window',函数(win){var name=[];返回函数(name){names.push(name);if(names.length==4){win.alert(names[1]);names=[];};};}])。。。。当我调用
    。。。什么都没发生。。。?如何在html代码中从服务调用列表?当您编写工厂时,需要在其中编写两个函数,一个用于设置数据,另一个用于获取数据。。。将factory模块导入原始控制器并通过该控制器设置数据,然后在新页面控制器中使用get函数并将数据放入可从新页面调用的范围变量中。