好的,我有以下角度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;
});
答案 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详细说明了不同类型的指令范围。