Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角形1.3紧耦合_Angularjs_Forms_Angularjs Scope - Fatal编程技术网

Angularjs 角形1.3紧耦合

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

有人认为angular 1.3中的表单导致了控制器和DOM之间的紧密耦合吗?这是一个反模式的角度

例如,当为表单指定name='formExample'属性时,要将其设置为脏或无效编程,必须在控制器中执行$scope.formExample.$setDirty()

这是个坏习惯

等待你的想法

例如:

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;
      });
    }
    
  • 然后使用自定义指令而不是
    ng单击
    调用save函数。可能有几种方法可以做到这一点,但其中之一是添加一种将函数作为属性的方法:

    <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();
        });
      });
    }
  };
});