如何隔离从控制器到指令的异步有效性检查以解决DRY和孤立的范围问题?

时间:2014-09-22 12:26:34

标签: angularjs angularjs-directive

我发现自己经常在多个控制器中重复以下代码,每个业务对象一个:

$scope.original = {name:"John"};
$scope.status = {error:false};

$scope.editMode = false;
$scope.cancel = function() {
    $scope.item = angular.copy($scope.original);
    $scope.editMode = false;
};
$scope.edit = function() {
    $scope.editMode = true;
};
$scope.item = angular.copy($scope.original);
$scope.save = function(item) {
    // do something ajax here
    // if it comes back 409, mark as conflict
    if ($scope.status.error) {
        $scope.myForm.name.$setValidity("conflict",false);
    } else {
        $scope.original = angular.copy($scope.item);
        $scope.editMode = false;
    }
};

问题有几个:

  1. 以上是为用户可以编辑的每个业务对象重复的样板文件,这会产生大量重复。
  2. 我不能保证$scope.myForm可以访问$scope,特别是因为其他指令可能在表单或输入元素周围创建了隔离的范围
  3. 在控制器内播放有效性似乎不自然。我知道我需要在控制器中执行resource.$save()或其他$http活动,但感觉这种类型的直接有效性设置属于指令。
  4. 直接设置有效性意味着我还需要主动监视它何时不再无效。在我的示例小提琴(下面)中,如果您将其设置为无效,然后再次取消和编辑,它将保持无效。 http://jsfiddle.net/shp0e10q/2/

0 个答案:

没有答案