当前位置: 首页 > 面试题库 >

AngularJS-属性指令输入值更改

陆沈浪
2023-03-14
问题内容

我有一个AngularJS属性指令,并且只要其父输入的值发生更改,我都想采取措施。现在,我正在使用jQuery:

angular.module("myDirective", [])
.directive("myDirective", function()
{
    return {
        restrict: "A",
        scope:
        {
            myDirective: "=myDirective"
        },
        link: function(scope, element, attrs)
        {
            element.keypress(function()
            {
                // do stuff
            });
        }
    };
});

没有jQuery,有没有办法做到这一点?我发现keyPress事件并没有完全实现我想要的功能,虽然我确定自己会提出解决方案,但是当我在Angular项目中使用jQuery时,我会有些紧张。

那么,Angular如何做到这一点呢?


问题答案:

AngularJS文档中有一个很好的例子。

这是非常好的评论,应该让您指出正确的方向。

一个简单的示例,也许更多,因此您想要的是下面的内容:

jsfiddle

HTML

<div ng-app="myDirective" ng-controller="x">
    <input type="text" ng-model="test" my-directive>
</div>

JavaScript

angular.module('myDirective', [])
    .directive('myDirective', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            scope.$watch(attrs.ngModel, function (v) {
                console.log('value changed, new value is: ' + v);
            });
        }
    };
});

function x($scope) {
    $scope.test = 'value here';
}

编辑: 同样的事情,不需要ngModel jsfiddle:

JavaScript

angular.module('myDirective', [])
    .directive('myDirective', function () {
    return {
        restrict: 'A',
        scope: {
            myDirective: '='
        },
        link: function (scope, element, attrs) {
            // set the initial value of the textbox
            element.val(scope.myDirective);
            element.data('old-value', scope.myDirective);

            // detect outside changes and update our input
            scope.$watch('myDirective', function (val) {
                element.val(scope.myDirective);
            });

            // on blur, update the value in scope
            element.bind('propertychange keyup paste', function (blurEvent) {
                if (element.data('old-value') != element.val()) {
                    console.log('value changed, new value is: ' + element.val());
                    scope.$apply(function () {
                        scope.myDirective = element.val();
                        element.data('old-value', element.val());
                    });
                }
            });
        }
    };
});

function x($scope) {
    $scope.test = 'value here';
}


 类似资料:
  • 问题内容: 我想知道是否有可能扩展Angular的输入指令?我想将一些侦听器附加到页面上的所有输入字段。我认为您可以使用来装饰现有模块,但我不知道如何使用指令(更确切地说是输入指令)来完成此操作。 那么,谁能将我推向正确的方向呢?一些例子? 编辑 到目前为止,这是我的指令: 在我看来,可以将其添加到输入字段中,如下所示: 缺点是,对于每个输入字段,我都必须在代码中手动附加此侦听器。因此,更改现有的

  • 问题内容: 我的AngularJS模板包含一些自定义HTML语法,例如: 我创建了一个指令来处理它: 一切正常,但表达式始终返回,即使在执行时从Google Chrome浏览器的JavaScript控制台可见该属性,该表达式始终返回。 有什么建议吗? 更新:Artem提供了一种解决方案。它包括这样做: AngularJS + stackoverflow =幸福 问题答案: 请参阅指令文档中的属性一

  • 我的AngularJS模板包含一些自定义HTML语法,例如: AngularJS+stackoverflow=bliss

  • 问题内容: 这不是一件很难的事,但我无法弄清楚如何做到最好。 我有一个父指令,像这样: 和一个子指令: 如何从子指令轻松访问父指令的和属性?在我的链接函数中,我可以访问父级作用域-我应该用来观察这些属性吗? 放在一起,我想拥有的是: 这个想法是默认情况下显示一组字段。如果单击,它们将成为输入并可进行编辑。 问题答案: 从这篇SO帖子中汲取灵感,我在这个笨拙的人中有一个可行的解决方案。 我不得不改变

  • 问题内容: 我认为开箱即用的指令上使用众所周知的角度属性应该很容易。 例如,如果我的指令名称是myDirective,我想以这种方式使用它: 无需像下面的示例一样定义自定义点击属性(onClick) 似乎ng-click可以工作,但是您也需要在指令标签上也指定ng-controller,这也是我所不希望的。我想在周围的div上定义控制器 是否可以在指令上使用ng-click以及在父html元素上定

  • 例如,Angular 2内置的属性指令ngClass和ngStyle,可以在任何组件或元素上工作。