AngularJS v1.5.5 双向绑定不适用于服务
AngularJS v1.5.5 two way binding doesn't work with service
我正在尝试通过 angular 服务从资源中检索共享数据,请参阅下面的服务代码:
(function(){var app = angular.module('geoProApp');
app.factory('project', ['$resource','$log',
function ($resource,$log) {
var res = $resource('http://localhost/api/project/:id', { id: '@id' }, {
queryPaged: {
method: 'POST',
isArray: false,
headers: { 'Content-Type': 'application/json' },
url: 'http://localhost/api/project/paged',
},
//ignore that for now
update: { method: 'PUT' }
});
var currentData = {
totalItems:0,
projects:[]
};
$log.log('initial value');
$log.log(currentData);
return {
queryPaged: function (params) {
return res.queryPaged(null, params).$promise.then(function (response) {
currentData.totalItems =response.total;
currentData.projects=response.result;
$log.log('after data retrieval in service');
$log.log(currentData);
return response;
})
},
data: currentData
}
}]);
}());
在使用服务的控制器中,我想绑定数据,像这样:
app.controller('projectList', function ($scope, $state, $stateParams, $log, $http, auth, project, filter, users, bsLoadingOverlayService) {
....
$scope.totalItems = project.data.totalItems;
$scope.projects = project.data.projects;
project.queryPaged(helpers.setPagingParams($scope.currentPage, $scope.itemsPerPage, filter)).then(function () {
$log.log('success callback exposed by service');
$log.log(project.data);
$log.log('bound values')
$log.log($scope.totalItems);
$log.log($scope.projects);
....
});
但是,绑定变量 $scope.totalItems
和 $scope.projects
似乎永远不会更新,即使服务检索了新数据,也可以在这里看到:
output of console
有人可以指出我可能遗漏的正确方向吗?
Angular 不太喜欢直接使用原始数据类型。双向绑定无法按预期工作。而不是像这样设置控制器范围
$scope.totalItems = project.data.totalItems;
$scope.projects = project.data.projects;
我想要一个这样的对象。
$scope.model = project.data;
阅读此 article,它解释了为什么双向绑定不适用于原始类型。
文章中的一个很好的引用是...
always have a '.' in your ng-models ... Having a '.' in your models
will ensure that prototypal inheritance is in play. So, use <input type="text" ng-model="someObj.prop1">
我正在尝试通过 angular 服务从资源中检索共享数据,请参阅下面的服务代码:
(function(){var app = angular.module('geoProApp');
app.factory('project', ['$resource','$log',
function ($resource,$log) {
var res = $resource('http://localhost/api/project/:id', { id: '@id' }, {
queryPaged: {
method: 'POST',
isArray: false,
headers: { 'Content-Type': 'application/json' },
url: 'http://localhost/api/project/paged',
},
//ignore that for now
update: { method: 'PUT' }
});
var currentData = {
totalItems:0,
projects:[]
};
$log.log('initial value');
$log.log(currentData);
return {
queryPaged: function (params) {
return res.queryPaged(null, params).$promise.then(function (response) {
currentData.totalItems =response.total;
currentData.projects=response.result;
$log.log('after data retrieval in service');
$log.log(currentData);
return response;
})
},
data: currentData
}
}]);
}());
在使用服务的控制器中,我想绑定数据,像这样:
app.controller('projectList', function ($scope, $state, $stateParams, $log, $http, auth, project, filter, users, bsLoadingOverlayService) {
....
$scope.totalItems = project.data.totalItems;
$scope.projects = project.data.projects;
project.queryPaged(helpers.setPagingParams($scope.currentPage, $scope.itemsPerPage, filter)).then(function () {
$log.log('success callback exposed by service');
$log.log(project.data);
$log.log('bound values')
$log.log($scope.totalItems);
$log.log($scope.projects);
....
});
但是,绑定变量 $scope.totalItems
和 $scope.projects
似乎永远不会更新,即使服务检索了新数据,也可以在这里看到:
output of console
有人可以指出我可能遗漏的正确方向吗?
Angular 不太喜欢直接使用原始数据类型。双向绑定无法按预期工作。而不是像这样设置控制器范围
$scope.totalItems = project.data.totalItems;
$scope.projects = project.data.projects;
我想要一个这样的对象。
$scope.model = project.data;
阅读此 article,它解释了为什么双向绑定不适用于原始类型。
文章中的一个很好的引用是...
always have a '.' in your ng-models ... Having a '.' in your models will ensure that prototypal inheritance is in play. So, use
<input type="text" ng-model="someObj.prop1">