Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs状态保留_Angularjs_State - Fatal编程技术网

Angularjs状态保留

Angularjs状态保留,angularjs,state,Angularjs,State,我正在使用angularjs动态添加行。但问题是,我希望在整个应用程序中保持这种状态。例如,在视图1中,我将一个动态行添加到表中,并从视图2移动到视图2,添加的行应该可用。那么,有没有任何方法可以在angularjs中保留视图的状态呢。以下是我用来动态添加行的代码: angular.module('MyApp', []) .controller('MainController', [ '$scope', function($scope) { $scope.rows = ['Row 1'];

我正在使用angularjs动态添加行。但问题是,我希望在整个应用程序中保持这种状态。例如,在视图1中,我将一个动态行添加到表中,并从视图2移动到视图2,添加的行应该可用。那么,有没有任何方法可以在angularjs中保留视图的状态呢。以下是我用来动态添加行的代码:

angular.module('MyApp', [])
.controller('MainController', [ '$scope', function($scope) {

  $scope.rows = ['Row 1'];

  $scope.counter = 2;

  $scope.addRow = function() {

    $scope.rows.push('Row ' + $scope.counter);
    $scope.counter++;
  }
}]);


<body ng-controller="MainController">

    <a href="#" class="button" ng-click="addRow()">Add Row {{counter}}</a>

    <table>
        <thead>
            <tr>
                <th width="200">Some Header</th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="rowContent in rows">
                <td>{{rowContent}}</td>
            </tr>
        </tbody>
    </table>    

</body>
angular.module('MyApp',[])
.controller('MainController',['$scope',函数($scope){
$scope.rows=['Row 1'];
$scope.counter=2;
$scope.addRow=函数(){
$scope.rows.push('Row'+$scope.counter);
$scope.counter++;
}
}]);
某个标题
{{rowContent}}

谢谢

是的。您应该将用于构建表的模型(以及新行)保存到服务中。然后将该服务注入控制器中

不过,能够看到一点代码会很好。但这里有一个如何做到这一点的例子:

免责声明

未经测试的示例

    angular.module('yourapp').factory('MySharedService',function(){

       var myTableModel = [];

       function addRow(row){
         myTableModel.push(row);
         return myTableModel;
       }

       return  {
           addRow: addRow,
           tableModel: myTableModel
       }

    })
    .controller('MyFirstController',['$scope','MySharedService',function($scope,
                MySharedService){

         $scope.tableModel = MySharedService.tableModel;

         $scope.addRow = function(row){
            $scope.tableModel = MySharedService.addRow(row);
         }

    }]).controller('MySecondController',['$scope','MySharedService',function($scope,
                  MySharedService){...}]);
编辑: 在进一步研究这个问题之后,我发现了一个类似的问题,有几种实现方法和示例代码
查看它是否对您有帮助。

持久状态应存储在服务器上。页面的任何刷新都将丢失存储在JavaScript应用程序内存中的所有内容。使用服务共享信息抛出您的视图(控制器)@ThomasNDS,因为我是angularjs的新手。请给我举个例子。我使用的是spring mvc框架,前端为angularjs。感谢您的快速响应,我已经更新了我的问题。你的意思是说我需要在view-2上调用此服务。好的。您应该在第二个视图上使用MySharedService.tableModel值分配$scope.tableModel。通过这种方式,您可以完成的是,第一个控制器和第二个控制器上的$scope.tableModel都由共享源分配。过去我已经讨论过这个问题,但他们希望在选项卡之间保留视图,而现在我正在spring mvcOh中更改控制器,所以您在更改视图时正在重新加载整个页面?是的,如果我们调用另一个控制器,默认情况下会在spring中重新加载页面