Javascript ng模型不会触发更改事件

Javascript ng模型不会触发更改事件,javascript,angularjs,angular-ngmodel,Javascript,Angularjs,Angular Ngmodel,我正在使用的框架(jQuery Mobile)侦听textareas的更改事件以更改标记。这是框架代码,所以我不能修改它并包含正确的AngularJS函数 我通过ng模型将textarea绑定到范围变量。当作用域变量发生变化时(由于绑定了textarea内容),不会触发javascript更改事件。但是,如果没有更改事件,jQuery Mobile将无法更改标记 是否有一种内置方法可以让Angular在不编写指令的情况下触发更改事件?如果我使用指令或ng更改,我必须将相应的代码添加到textar

我正在使用的框架(jQuery Mobile)侦听textareas的更改事件以更改标记。这是框架代码,所以我不能修改它并包含正确的AngularJS函数

我通过ng模型将textarea绑定到范围变量。当作用域变量发生变化时(由于绑定了textarea内容),不会触发javascript更改事件。但是,如果没有更改事件,jQuery Mobile将无法更改标记

是否有一种内置方法可以让Angular在不编写指令的情况下触发更改事件?如果我使用指令或ng更改,我必须将相应的代码添加到textarea元素的每次出现

我正在尝试做的简短示例(也可通过以下方式获得):



你为什么不用零钱呢

<div ng-app="app" ng-controller="Controller">
    <textarea ng-model="textValue" ng-change="changed()"></textarea>
</div>

addEventListener是本机的,不是jquery。此外,ng模型会覆盖更改事件,特别是当更改事件是本机事件时

如果您想使用ngModel并监听更改事件,请使用:(小心:此指令需要ngModel)

您可以覆盖
ngModel
手动触发更改事件:


addEventListener是本机的,不是jquery。另外,ng模型会覆盖更改事件,特别是如果更改事件是本机的,并且不是由angular处理的。不确定您想做什么。有一点主题,但我可以提供一些建议。如果可能的话,我们不应该将jquerymobile和AngularJS结合起来,因为它们不能很好地结合在一起。根据经验,我认为要实现这一点,您会遇到很多麻烦。项目约束要求将JQM和AngularJS结合起来,到目前为止,这两种方法都非常有效。我只是在寻找一些“神奇”的开关,它可以实现更改事件的传播。此开关似乎不存在。我没有使用ng change,因为jQuery Mobile本身正在侦听更改事件(它是框架代码)。总是有“角度方式”的选项,但不幸的是jQuery Mobile没有这样做。但是点击事件不能有两个列表器吗?什么点击事件?更改事件的事件侦听器由jQuery Mobile绑定。更改事件处理程序由jQuery Mobile定义。我不能使用ng change,因为我不想绑定另一个更改处理程序,而是触发现有的更改处理程序。这就是为什么你的答案,虽然写得很好,但不适合这个问题。请检查你的控制台,我没有使用
警报
,这正是我想要的,因为它添加了正确的行为,而没有触及代码的所有部分。注意触发事件可能导致。。。这里有一个很小的问题:这是一个共享父范围的指令,我们正在添加一个手表。如果在该指令的HTML声明上有一个
ngIf
,导致它被多次删除和重新添加,这不会造成手表泄漏吗?有什么办法可以处理吗?据我所知,没有指令描述符…@user2173353:我认为没有问题
NgIf
()指令的优先级为:600,在“我们的”
NgModel
之前运行(优先级:-1)。这意味着处理程序被附加到由
ngIf
创建的作用域。如果
ngIf
删除作用域,处理程序也会被销毁,因为它直接附加到作用域
<div ng-app="app" ng-controller="Controller">
    <textarea ng-model="textValue" ng-change="changed()"></textarea>
</div>
module.controller("Controller", function ($scope) {
   $scope.textValue = "Test"; 

   var interval = $interval(function () {
       $scope.textValue = $scope.textValue === "Test" ? "Hello World" : "Test";
   },2000);

   $scope.changed = function(){
         alert('changed');
   }

   $scope.$on("$destroy", function(){
       $interval.cancel(interval)
   })
});
module.directive("ngModel",function(){
    return {
        restrict: 'A',
        priority: -1, // give it lower priority than built-in ng-model
        link: function(scope, element, attr) {
            scope.$watch(attr.ngModel,function(value){
                if (value){
                    element[0].onchange();
               //   element.trigger("change"); use this for jQuery
                }
            });
        }
      }
});