如何在app.directive中访问app.controller $ scopes

时间:2016-06-04 12:40:11

标签: angularjs angularjs-directive angularjs-scope

好的,我有以下角度js代码。我想要做的是在表单内按下输入按钮时将一些范围设置为null。到目前为止,我有一个使用ng-click事件的div,它将这些范围设置为null,但我也希望使用enter键进行相同的操作。

App指令:

app.directive('ngEnter', function () {
    return function (scope, element, attrs) {
        element.bind("keydown keypress", function (event) {
            if(event.which === 13) {
                //access scopes here like that
                //$scope.eurval = null;
              //$scope.usdval = null;
              //$scope.otherval = null;
                scope.$apply(function (){
                    scope.$eval(attrs.ngEnter);
                });

                event.preventDefault();
            }
        });
    };
});

App.controller

app.controller('formCtrl', function($scope) {
              $scope.eurval = null;
              $scope.usdval = null;
              $scope.otherval = null;
});

2 个答案:

答案 0 :(得分:1)

有一种能够为你做到这一点的方法:

app.controller('formCtrl', function($scope) {
    $scope.reset = function() {
        $scope.eurval = null;
        $scope.usdval = null;
        $scope.otherval = null;
    };

    $scope.reset();
});

然后在指令中使用它:

if(event.which === 13) {
    scope.$apply(function (){
        scope.reset();
        scope.$eval(attrs.ngEnter);
    });
    event.preventDefault();
}

答案 1 :(得分:0)

在你的html文件中,如果你的指令在控制器内,它(默认情况下)从控制器继承范围。像这样的东西 -

<div ng-controller="myCtrl">
    <input my-directive type="text">
</div>

然后,您可以使用传入的变量访问指令中的控制器范围,在您的情况下为scope,而不是$scope

Here's an article详细说明了不同类型的指令范围。