Angular - 无法获得自定义指令以配合ng-change

时间:2015-10-03 20:24:50

标签: angularjs angular-directive angularjs-ng-model angularjs-ng-change

我有一个非常简单的指令(名为cooperate-with-ng-change),需要ng-model并且我希望它与ng-change合作。

重申,我希望能够<cooperate-with-ng-change ng-model="model" ng-change="changeHandler()"></cooperate-with-ng-change>

但是,我注意到changeHandler()被触发时,model是旧值,而不是新值。

这里是指令定义对象:

return {
    restrict: "E",
    require: ["ngModel"],
    scope: {
      "value": "=ngModel"
    },
    template: "<label>Cooperate with NgChange: <input type='text' ng-model='value' ng-model-options='{debounce: 500}' /></label>",
    link: function(scope, element, attrs, ctrls) {
      var inputNgModelCtrl = element.find("input").controller("ngModel");
      var parentNgModelCtrl = ctrls[0];


      Array.prototype.push.apply(inputNgModelCtrl.$viewChangeListeners, parentNgModelCtrl.$viewChangeListeners)

      //if I wrap all the parentNgModelCtrl.$viewChangeListeners in a timeout and digest in changeHandler
      //then message matches afterDebounce
      /*Array.prototype.push.apply(inputNgModelCtrl.$viewChangeListeners,
        parentNgModelCtrl.$viewChangeListeners.map(
          function(listener) {
            return function() {
              setTimeout(listener, 1)
            }
          }))
      */
    }
  }

Here's a plunker link if you want to play with it

我的猜测是在设置模型值之前调用$viewChangeListeners,但是在设置模型值后我无法找到可能对应的内容。

0 个答案:

没有答案