我的目标是在有效后自动保存表单并使用超时对其进行更新。我设置为:
(function(window, angular, undefined) {
'use strict';
angular.module('nodblog.api.article', ['restangular'])
.config(function (RestangularProvider) {
RestangularProvider.setBaseUrl('/api');
RestangularProvider.setRestangularFields({
id: "_id"
});
RestangularProvider.setRequestInterceptor(function(elem, operation, what) {
if (operation === 'put') {
elem._id = undefined;
return elem;
}
return elem;
});
})
.provider('Article', function() {
this.$get = function(Restangular) {
function ngArticle() {};
ngArticle.prototype.articles = Restangular.all('articles');
ngArticle.prototype.one = function(id) {
return Restangular.one('articles', id).get();
};
ngArticle.prototype.all = function() {
return this.articles.getList();
};
ngArticle.prototype.store = function(data) {
return this.articles.post(data);
};
ngArticle.prototype.copy = function(original) {
return Restangular.copy(original);
};
return new ngArticle;
}
})
})(window, angular);
angular.module('nodblog',['nodblog.route'])
.directive("autosaveForm", function($timeout,Article) {
return {
restrict: "A",
link: function (scope, element, attrs) {
var id = null;
scope.$watch('form.$valid', function(validity) {
if(validity){
Article.store(scope.article).then(
function(data) {
scope.article = Article.copy(data);
_autosave();
},
function error(reason) {
throw new Error(reason);
}
);
}
})
function _autosave(){
scope.article.put().then(
function() {
$timeout(_autosave, 5000);
},
function error(reason) {
throw new Error(reason);
}
);
}
}
}
})
.controller('CreateCtrl', function ($scope,$location,Article) {
$scope.article = {};
$scope.save = function(){
if(typeof $scope.article.put === 'function'){
$scope.article.put().then(function() {
return $location.path('/blog');
});
}
else{
Article.store($scope.article).then(
function(data) {
return $location.path('/blog');
},
function error(reason) {
throw new Error(reason);
}
);
}
};
})
我想知道是否有最佳方法。
查看代码,我可以看到,如果当前输入有效,并且用户也更改了任何有效的值,则不会重新触发$
watch。这是因为监视功能仅在值更改时才执行。您还应该检查表单的脏状态,并在持久保存表单数据时将其重置,否则会出现无休止的持久循环。
而且您不清除以前的任何超时。
如果当前超时正在进行,则当前代码将保存无效数据。
我采用了一条指令,该指令可以完成所有这些工作,并具有更好的SOC,因此可以重复使用。只需为其提供一个回调表达式,就可以了。
看到它在这个矮人的行动。
演示控制器
myApp.controller('MyController', function($scope) {
$scope.form = {
state: {},
data: {}
};
$scope.saveForm = function() {
console.log('Saving form data ...', $scope.form.data);
};
});
演示HTML
<div ng-controller="MyController">
<form name="form.state" auto-save-form="saveForm()">
<div>
<label>Numbers only</label>
<input name="text"
ng-model="form.data.text"
ng-pattern="/^\d+$/"/>
</div>
<span ng-if="form.state.$dirty && form.state.$valid">Updating ...</span>
</form>
</div>
指示
myApp.directive('autoSaveForm', function($timeout) {
return {
require: ['^form'],
link: function($scope, $element, $attrs, $ctrls) {
var $formCtrl = $ctrls[0];
var savePromise = null;
var expression = $attrs.autoSaveForm || 'true';
$scope.$watch(function() {
if($formCtrl.$valid && $formCtrl.$dirty) {
if(savePromise) {
$timeout.cancel(savePromise);
}
savePromise = $timeout(function() {
savePromise = null;
// Still valid?
if($formCtrl.$valid) {
if($scope.$eval(expression) !== false) {
console.log('Form data persisted -- setting prestine flag');
$formCtrl.$setPristine();
}
}
}, 500);
}
});
}
};
});
正如标题所说,我想知道在Amazon DynamoDB中扫描表的最佳方式,通过主键以外的另一个字段进行搜索。 我对此进行了搜索,读了很多书,但我找到了这个解决方案: 这对我来说是可行的,但我也了解到,对性能和定价而言,在表上执行扫描是个坏主意。但是,怎么做呢? > DocumentClient和DynamoDB对象有什么区别? 我总是使用。get()用于在DynamoDB上获取所需内容。这是一种好
这个问题已经被问了无数次,但是没有一个真正解决保存时的旋转问题。 这是我最初如何保存一个位图到我的设备: 以上内容保存了。 然后我看到了这个答案,但问题是它将已经保存的位图旋转到正确的方向。例如,如果您想将设置为,则可以这样做。但是,如果我想共享位图,或者想在设备库中打开它,方向仍然不正确。然后,我将不得不执行与上面相同的过程-等。这将导致同样的问题。 如何将
问题内容: 我要进行Flask + Nginx + Gunicorn部署。我已经安装并正在运行Nginx,并且按照文档中的说明运行gunicorn: 但是,当我注销服务器时,gunicorn进程退出了吗?确保Nginx保持连接状态并在崩溃时重新启动的正确方法是什么? 问题答案: 运行Gunicorn时使用选项。例:
本文向大家介绍AngularJS表格添加序号的方法,包括了AngularJS表格添加序号的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS表格添加序号的方法。分享给大家供大家参考,具体如下: 1、问题背景 AngularJS表格需要序号,可以利用$index来作为序号 2、实现实例 3、实现结果 更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《Angu
我正在从Excel文档中提取文本并将它们作为id3标签添加到一些mp3文件中。我的Excel文档中的大多数字符是俄语(Unicode),但也有一些是英文的。当我运行脚本时,所有英文标签都被正确地写成元数据,但所有俄语字符都显示为问号。如果我在控制台中打印俄语字符,它们会完美地显示出来。为什么它们被写成问号?
本文向大家介绍AngularJS控制器controller正确的通信的方法,包括了AngularJS控制器controller正确的通信的方法的使用技巧和注意事项,需要的朋友参考一下 AngularJS是一款非常强大的前端MVC框架,AngularJS中的controller是个函数,用来向视图的作用域($scope)添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为。 当我们在