Angularjs 角形1.3紧耦合
有人认为angular 1.3中的表单导致了控制器和DOM之间的紧密耦合吗?这是一个反模式的角度 例如,当为表单指定name='formExample'属性时,要将其设置为脏或无效编程,必须在控制器中执行$scope.formExample.$setDirty() 这是个坏习惯 等待你的想法 例如:Angularjs 角形1.3紧耦合,angularjs,forms,angularjs-scope,Angularjs,Forms,Angularjs Scope,有人认为angular 1.3中的表单导致了控制器和DOM之间的紧密耦合吗?这是一个反模式的角度 例如,当为表单指定name='formExample'属性时,要将其设置为脏或无效编程,必须在控制器中执行$scope.formExample.$setDirty() 这是个坏习惯 等待你的想法 例如: this.onSaveClicked = function () { that.saveMessage = that.SAVING_IN_PROGRESS; //U
this.onSaveClicked = function () {
that.saveMessage = that.SAVING_IN_PROGRESS;
//Update project with changes
ProjectsBLL.update($scope.entities.project.Model, function (data) {
$scope.entities.project.Model = data;
$scope.configurationForm.$setPristine();
that.saveMessage = that.SAVING_FINISHED;
}, null)
}
听起来您不希望控制器中出现以下行
$scope.configurationForm.$setPristine();
为此,一种方法是:
- 更改
以返回承诺而不是接受回调(如何执行此操作可能超出了此问题的范围)。然后还从ProjectsBLL.update
返回派生承诺,然后从控制器中的函数返回
:
this.onSaveClicked = function () { that.saveMessage = that.SAVING_IN_PROGRESS; //Update project with changes return ProjectsBLL.update($scope.entities.project.Model).then(function (data) { $scope.entities.project.Model = data; that.saveMessage = that.SAVING_FINISHED; }); }
- 然后使用自定义指令而不是
调用save函数。可能有几种方法可以做到这一点,但其中之一是添加一种将函数作为属性的方法:ng单击
<button type="button" my-submit="onSaveClicked()">Save</button>
这方面的一个版本,仅使用
$timeout
模拟对$http
的调用,可以在看到您建议的替代方法??您能给出一个具体的代码示例,说明您在控制器中使用$setDirty
的确切时间吗?然后,答案可以给出其他编码方法。我有一个关于setPristine()的示例。只有当用户按下“取消”且存在某些条件时,才调用setPristine()。@einav您可以将其作为代码放入问题中,或者作为指向Plunker的链接吗?@einav我的意思是,如果您可以编辑问题并将代码放入其中,则无需阅读注释即可回答问题,并且代码格式合理。谢谢您的回答。但我不明白第一条路。如何实现$setPristine()?@einav我只给出了一种方法。我刚刚把它分为两个要点。
app.directive('mySubmit', function($parse) {
return {
require: '^form',
link: function(scope, element, attrs, formController) {
var callback = $parse(attrs.mySubmit);
element.on('click', function() {
callback(scope, {}).then(function() {
formController.$setPristine();
});
});
}
};
});