【问题标题】:Does Angular link function trigger change event?Angular 链接功能会触发更改事件吗?
【发布时间】:2016-02-29 20:02:29
【问题描述】:

我有一个带有 link 函数的 Angular 指令,在其中我正在实例化一个 jQuery 插件,如此处所示 https://plnkr.co/edit/58nOhypt6FRdI4At5jwu

问题是指令被实例化的每一刻,它都会触发一个change 事件,而我有一个函数监听那些change 事件(当它们被用户触发时)。

link 函数是否总是触发change?还是 jQuery 插件在做呢?我正在接收一个值(来自 Ajax 请求)并将其放入输入中。插件不应该“触摸”它,它应该只是实例化日期选择器。

另外一点是:让我们考虑插件改变了输入。这是一个程序化更改,ng-change 指令不会监听这些程序化更改,对吧?

【问题讨论】:

    标签: javascript jquery angularjs angularjs-directive


    【解决方案1】:

    不,link 函数不会 trigger 更改事件。此代码正在触发更改事件:

    $datepicker = $(element).datepicker({
            format: "dd/mm/yyyy",
            startDate: 'today',
            language: 'pt-BR',
            autoclose: true,
            todayHighlight: true,
            forceParse: false
          });
       $datepicker.datepicker('setDate', date);
    

    这实际上改变了模型$scope.date,这就是ng-change 被调用的原因!

    这将回答这个问题:

    另外一点是:让我们考虑插件改变了输入。 这是一个程序性更改,ng-change 指令不会 听听这些程序化的变化,对吧?

    换句话说:

    基本上,您在链接期间更改输入的格式 事件。

    您可以通过告诉您的edit() 函数来解决实际变化,或者您可以简单地执行一个简单的watch 而不要使用ngChange 指令。

    $scope.$watch('date', function(newValue, oldValue) {
    
        if(newValue!=oldValue&&newValue!='25/12/2018'){
          console.log(newValue);
          console.log(oldValue);
          $scope.changed = true;
        }
      });
    

    https://plnkr.co/edit/Yq32mq7fm7niy6eXhrDL?p=preview

    在我看来,如果可以的话。 我不会在项目中使用任何 jQuery.

    你应该使用 Angular ui-datepicker https://angular-ui.github.io/bootstrap/#/datepicker

    关于 AngularjQuery reference

    DOM Manipulation 停止尝试使用 jQuery 来修改 DOM 控制器。真的。这包括添加元素,删除元素, 检索它们的内容,显示和隐藏它们。使用内置 指令,或在必要时编写自己的指令来执行 DOM 操纵。有关复制功能,请参见下文。

    如果您正在努力改掉这个习惯,请考虑将 jQuery 从 你的应用程序。真的。 Angular 有 $http 服务并且功能强大 几乎总是不必要的指令。 Angular 的捆绑 jQLite 有一些在写作中最常用的功能 Angular 指令,尤其是绑定到事件。

    【讨论】:

    • 好的!我想知道使用watch 而不是ng-change,但我会有很多手表(我有一个项目列表,每个项目都有一个日期属性),这可能会使我的用户界面变慢......跨度>
    • @VictorLeal 不要使用watch。我只建议您将watch 作为解决方法。我的主要答案是停止使用 jQuery 并在您的项目中导入angular-ui.github.io/bootstrap/#/datepicker,因此不需要像您那样配置datepicker
    • 我正在做一些测试!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2017-07-04
    相关资源
    最近更新 更多