confirm("Ohhh, hello there, is it Ok to click Cancel?");我认为这基本上是一个关于角度上的CRUD的问题。我对getter和setter有点困惑,主要是因为双向数据绑定几乎完成了获取和设置事物的所有工作。我想知道什么是创建getter和setter的最好的可伸缩方式,这样以后就不需要修改我的函数了。
关于第一种安排,我试着尽可能简单,但是我在开始和开始的时候感到不舒服。
安排01:
$scope.getData = function(){
$http.get(url + '/data')
.then( function (res) {
return res.data; } );
};
$scope.setData = function () {
$scope.data = $scope.getData();
};
$scope.insertData = function (data) {
$http.post(url + '/data', { data: data})
.then( function (res) {
// nothing here. } );
};然而,关于第二种安排,我想直接去我需要的地方。当我从服务器获取数据时,我会自动地将我的$scope.data设置为检索到的数据;
安排02:
$scope.getData = function () {
$http.get(url + '/data')
.then( function (res) {
$scope.data = res.data;
});
};
$scope.insertData = function (data) {
$http.post( url + '/data', { data: data })
.then( function (res) {
$scope.getData(); //To update.
//OR $scope.data.push(res.data);
});
};进一步看,我已经在角文档上找到了这,但是如果角文档已经使用了getter/setter,那么使用getter/setter有什么意义呢?看看其他技术,很难比较,因为角有自动获取.
我甚至不知道如何提出这个问题。但是,基本上,我想知道我的getter和setter如何会损害我未来的应用程序,以及是否有一个好的方法,以及为什么要创建角度的getter和setter。
谢谢你的建议。
发布于 2015-08-27 20:07:24
您的良好实践是将您的逻辑封装到服务中。您必须知道,在角度上,所有服务都是Singleton,只有一个服务实例。
我做了一个简单的例子,使用$q.defer(),它是延迟API中的允诺管理器。
$q.defer() get 2方法:
控制器
(function(){
function Controller($scope, $q, Service) {
//Use promise manager
var defer = $q.defer();
///Create our promise
var promise = defer.promise;
$scope.data = [];
var newData = [
{
name:'john',
age: 25
},
{
name: 'toto',
age: 13
}
];
Service.get().then(function(data){
//Retrieve our data
$scope.data = data;
//Set new data to our factory
Service.set(newData);
//Retrieve new data
Service.get().then(function(data){
//Resolve new data
defer.resolve(data);
});
});
//Retrieve new dataset
promise.then(function(data){
$scope.data = data;
})
}
angular
.module('app', [])
.controller('ctrl', Controller);
})();服务
(function(){
function Service($q){
var data = [0,1,2,3,4];
function set(value){
data = value;
}
function get(){
return $q(function(resolve){
//Simulate latency
setTimeout(function(){
//Resolve our data
resolve(data);
}, 1000);
});
}
return {
get: get,
set: set
};
}
angular
.module('app')
.factory('Service', Service);
})(); <body ng-app='app' ng-controller="ctrl">
<pre>{{data}}</pre>
</body>因此,您可以使用该服务设置一些数据,并在需要时检索它。不要忘记,服务是singleton。
你可以看到工作柱塞
发布于 2015-08-27 19:33:54
在JavaScript中,您通常不像OOP语言那样使用getter和setter,特别是因为您没有私有的概念(这样任何人都可以访问您的字段)。ES5有getter和setter,但它也增加了隐藏实现细节的缺失功能。如果您希望在AngularJS应用程序中获得附加逻辑的getter和setter,您可以简单地定义使用$watch更新的附加字段。
此外,如果每个字段都执行此操作,则在每次更改时发送HTTP请求都是一种开销。你所要做的是直接写到字段。
例如,WPF/C#要求您定义setter来引发OnPropertyChanged,但是在AngularJS中不需要这样做。您用AngularJS编写的所有内容都将自动触发所谓的$digest循环,在这个循环中,它将检查所做的更改。然后,它将自动更新用户界面,给出使用模板绑定或ng-model指令。
发布于 2015-08-27 19:56:23
如果您认为像纯Javascript一样,是基本相同的逻辑,那么angular所做的就是为您创建modules以便使用最佳实践,所以使用它们很容易。
function DataService($http) {
this.get = function() {
return $http.get(...);
}
this.create = function(newData) {
return $http.post(...);
}
..
}用角度,就像阿里·加贾尼所说的,你基本上可以做到,
angular.module('myApp').service('DataService', ['$http', DataService]);或者使用factory样式
function DataService($http) {
var myPrivateVariable = "something";
function get() {
return $http.get(...);
}
...
// expose them public
return {
get: get
};
}
angular.module('myApp').factory('DataService', ['$http', DataService]);https://stackoverflow.com/questions/32257949
复制相似问题