Angularjs Angular.js将模型绑定到指令

Angularjs Angular.js将模型绑定到指令,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在尝试组合一个角度指令,它将取代加法 ng-disabled="!canSave(schoolSetup)" 在表单按钮元素上,canSave是一个在控制器中定义的函数,类似于以下内容,其中参数是表单的名称 $scope.canSave = function(form) { return form.$dirty && form.$valid; }; 理想情况下,我希望提交按钮上的指令看起来像这样 can-save="schoolSetup" 其中字符串是表单的名

我正在尝试组合一个角度指令,它将取代加法

ng-disabled="!canSave(schoolSetup)"
在表单按钮元素上,
canSave
是一个在控制器中定义的函数,类似于以下内容,其中参数是表单的名称

$scope.canSave = function(form) {
    return form.$dirty && form.$valid;
};
理想情况下,我希望提交按钮上的指令看起来像这样

can-save="schoolSetup"
其中字符串是表单的名称

$scope.canSave = function(form) {
    return form.$dirty && form.$valid;
};
所以。。。你会怎么做?这是我能做到的

angular.module('MyApp')
    .directive('canSave', function () {
        return function (scope, element, attrs) {

            var form = scope.$eval(attrs.canSave);

            function canSave()
            {
                return form.$dirty && form.$valid;;
            }

            attrs.$set('disabled', !canSave());
        }

    });
但这显然不能正确绑定到表单模型,只能在初始化时起作用。是否存在从该指令中绑定ng disabled指令的方法,或者这也是错误的方法

angular.module('MyApp')
    .directive('canSave', function () {
        return function (scope, element, attrs) {
            var form = scope.$eval(attrs.canSave);

            scope.$watch(function() {
                return form.$dirty && form.$valid;
            }, function(value) {
                value = !!value;
                attrs.$set('disabled', !value);
            });
        }
    });
普朗克:


Plunker:

您可以像这样将函数调用传递给指令

function Ctrl($scope) {
    $scope.canSave = function () {
        return form.$dirty && form.$valid;
    };
}

app.directive('canSave', function () {
    return {
        scope: {
            canSave: '&'
        },
        link: function (scope, element, attrs) {
            attrs.$set('disabled', !scope.canSave());
        }
    }
});
这是模板

<div ng-app="myApp" ng-controller="Ctrl">
    <div can-save="canSave()">test</div>
</div>

测试

您可以看到该函数是从指令调用的

您可以像这样将函数调用传递给指令

function Ctrl($scope) {
    $scope.canSave = function () {
        return form.$dirty && form.$valid;
    };
}

app.directive('canSave', function () {
    return {
        scope: {
            canSave: '&'
        },
        link: function (scope, element, attrs) {
            attrs.$set('disabled', !scope.canSave());
        }
    }
});
这是模板

<div ng-app="myApp" ng-controller="Ctrl">
    <div can-save="canSave()">test</div>
</div>

测试

您可以看到该函数是从指令调用的

谢谢您的回答!将按此方式工作,但正在尝试删除需要的控制器。谢谢您的回答!将按此方式工作,但正在尝试删除需要的控制器。