AngularJS:在保存到控制器之前从service获取更新的数据
AngularJS: Getting updated data from service before saving in controller
我正在研究AngularJS(1.4.2)应用程序的一个部分,并试图弄清楚如何在数据发生变化时从服务中获取控制器更新的数据。
我已经设置了这个活塞来演示这个问题。我希望这个例子看起来不太复杂,但在应用程序中,我有一个主表视图像一个在柱塞,但有五个选项卡,每个都有自己的部分html文件和控制器。现在有一个服务保存所有的字段数据,就像柱塞一样。其思想是,用户可以选中给定字段旁边的复选框来激活/停用该字段,因为它适合他们的数据,并且只有活动字段应该持久化在数据库中,因此服务将过滤后的数据返回给控制器。MainCtrl中的verifyFields()函数模拟了我的应用程序中的save函数,控制器应该用来自字段服务的更新数据填充newConnectionData对象。我包含了一个pre,以显示当复选框被选中或未选中或输入值发生变化时,服务模型数据确实会更新。但是到目前为止,我一直无法在主控制器中更新数据。
我试图从这个堆栈溢出问题中单独合并plunker解决方案,建议从服务返回一个函数而不是一个原语:
test.service('fields', function() {
...
var fields = this;
return {
...
activeOrders : function() { return filteredOrders },
activeShipment : function() { return filteredShipment },
activeActivity : function() { return filteredActivity }
}
test.controller('MainCtrl', ['$scope', '$rootScope', 'fields',
function($scope, $rootScope, fields) {
...
$scope.activeShipment = function () {
return fields.activeShipment();
};
$scope.activeActivity = function () {
return fields.activeActivity();
};
…这个建议使用$watch:
$scope.$watch(function () { return fields.activeOrders() }, function (newVal, oldVal) {
if (typeof newVal !== 'undefined') {
$scope.activeOrders = fields.activeOrders();
}
});
$scope.newConnectionData = {};
...
$scope.verifyFields = function () {
$scope.newConnectionData = {
orders : $scope.activeOrders,
shipment : $scope.activeShipment(),
activity : $scope.activeActivity()
}
...
}
…但到目前为止,它们都没有解决更新控制器中的数据的问题。如果你有任何建议,我将不胜感激。感谢您的宝贵时间!
让服务将数据公开为属性。不要使控制器的用法过于复杂。直接使用即可。如果需要以html格式显示数据,请在$scope
中添加对该服务的引用。
test.service('fields', function() {
...
var fields = this;
return {
...
activeOrders : filteredOrders ,
activeShipment : filteredShipment ,
activeActivity : filteredActivity
In controller
test.controller('MainCtrl', ['$scope', '$rootScope', 'fields',
function($scope, $rootScope, fields) {
$scope.fields = fields;
在模板{{fields.activeShipment}}
看起来您可能需要重新计算_。其中与函数一起调用。
您的factory
服务应该有这样的行:
activeOrders : function() { return _.where(fields.ordersSchema, {active: true} ); },
最后的结果是
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 从纯Javascript获取AngularJs Service
- Angular service/value 不会从 $(document).ready() 中获取新的变量
- 在Angular Service中获取数据并将其传递给另一个控制器
- 从Service Worker中获取主页的URL
- Angular2 -在路由和渲染组件之前,通过service获取数组
- 如何从service. getdistancemmatrix({.....})中获取值
- 如何从service worker获取通知
- 获取RESTfull Service公开的图像,并在HTML文档中使用它们
- 我该如何编写Angular Service来根据product ID获取特定的产品?
- Javascript service worker:从缓存中获取资源,同时更新它
- AngularJS:在保存到控制器之前从service获取更新的数据
- 状态不持久化——AngularJS Ionic Service从JSON文件中获取数据,然后忘记它
- 从$http service获取的数据不能通过ng-click获取
- 如何从Angular2 ng2Translate Translate Service方法中获取字符串值
- 正在Service Worker中获取Javascript
- 使用 Angular 2 Http 从 REST Web Service 获取数据
- 你能在从Service获取的HTML中使用Angular的绑定表达式吗?