【问题标题】:Angularjs: two way data bindings and controller reloadAngularjs:两种方式数据绑定和控制器重新加载
【发布时间】:2012-11-30 04:48:22
【问题描述】:

如果使用路由和控制器,那么模型不会在控制器重新加载之间保存他的状态。 Angular 在每次路由加载时创建控制器实例和新范围。

例如,我在输入中输入具有 ng-model="something" 的内容,然后转到另一条路线,然后返回第一条路线。我输入的所有文字都丢失了。

我需要在路由更改之间进行简单的双向数据绑定。尽可能简单,如 knockoutjs 中的 ko.observable。或者在一个控制器中隐含地像角度一样。也许使用单例 $scope 作为控制器?

我找到了方法,当我创建用于在路由更改之间保存数据的服务并将其注入控制器时。在控制器的构造函数中,我使用来自服务的值创建模型,并 $scope.watch 此模型的更改,并在更改时将模型的值设置为服务。

有没有更简单的方法?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    你是对的 - 服务是这样做的正确方法。你可以这样使用它:

    app.js

    app.factory('paginationService', function() {
        return {
            cur: 1,
            total: 9,
            pageSize: 8
        };
    });
    
    
    app.controller('Page1Ctrl', function($scope, paginationService) {
      $scope.pagination = paginationService;
    });
    

    Page1.html

    <div ng-controller="Page1Ctrl">
      <h2>Page1</h2>
    
      <p>curPage: <input type="number" ng-model="pagination.cur" /></p>  
    </div>
    

    full example

    【讨论】:

    • 我在 Google 上搜索得更好,并观看了“AngularJS MTV 聚会:最佳实践 (2012/12/11)”youtube.com/watch?v=ZhfUv0spHCY 所以,正如您所说,正确的决定是服务。如果在 html 绑定中使用带点的东西,则无需使用 $scope.watch,例如 pastebin.com/g5GncAhY
    【解决方案2】:

    您可以将 $rootScope 注入您的控制器并使用它来存储全局可访问的变量,尽管您仍然会遇到同样的问题来监视更改。您可以创建一个指令,将您的服务注入当前范围,并让它在范围内绑定监视处理程序。

    【讨论】:

    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多