如果使用路由和控制器,则模型不会在控制器重新加载之间保存其状态。 Angular在每个路由加载时创建控制器实例和新范围。
例如,我输入的内容包含ng-model =“something”,转到另一条路线,然后返回第一条路线。我输入的所有文字都丢失了。
我需要在路由更改之间进行简单的双向数据绑定。尽可能简单,比如knockoutjs中的ko.observable。或隐含地像在一个控制器内的角度。也许使用singleton $ scope作为控制器?
当我创建服务以在路由更改之间保存数据并将其注入控制器时,我找到了方法。在控制器的构造函数中,我使用service中的值创建模型,并使用$ scope.watch将此模型用于更改,并在更改时将模型的值设置为service。
有没有更简单的方法?
答案 0 :(得分:11)
你是对的 - 服务是这样做的正确方法。您可以像这样使用它:
<强> 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。
答案 1 :(得分:0)
您可以将$ rootScope注入您的控制器并使用它来存储全局可访问的变量,尽管您仍然会在观察更改时遇到相同的问题。您可以创建一个指令,将您的服务注入当前作用域,并将其绑定到作用域中的监视处理程序。