簡體   English   中英

Angular指令實例$ watch無法正常工作

[英]Angular directive instances $watch not working

我有兩個時間選擇器輸入,它們的總和需要計算。 我的指令中的代碼可以正常工作,但是當頁面上有多個指令時,問題就來了。 我嘗試在指令的控制器或鏈接函數中設置監視,但是監視僅在最后實例化的指令上工作。

我可能會想念什么?

編輯:對不起錯誤的plunkr

這是一個unk客: https ://plnkr.co/edit/uC38NIbYsy9Vv3S38xHh ? p = preview

指令代碼:

 myApp.directive('myTimepicker', function() {
  return {
    restrict: 'A',
    scope: {
      tmodel: '=',
      ttitle: '@'
    },
    link: function(scope, $element, attr) {
      console.log(scope);
      scope.tform = scope.tmodel;
      scope.$watch('tform.on', function(newValue, oldValue) {
        // console.log("calc on"+scope.ttitle);
        _calctotal();
      });
      scope.$watch('tform.off', function(newValue, oldValue) {
        // console.log("calc off");
        _calctotal();
      });
      _calctotal = function() {

        var on = new Date(scope.tform.on);
        var off = new Date(scope.tform.off);
        var total = off.getHours() - on.getHours();
        var totalmin = off.getMinutes() - on.getMinutes();
        if (totalmin < 0) {
          total = total - 1;
          totalmin = totalmin * -1;
        }
        if (total < 0) {
          total = "Invalid";
          totalmin = "";
        }
        if (totalmin < 10) totalmin = "0" + totalmin;
        scope.tform.total = total + ":" + totalmin;

      };
      _calctotal();
    },
    controller: function($scope) {
      // console.log($scope);

    },
    templateUrl: "mytimepicker.html"
  }
});

嘗試使用ng-change代替$ watch,它更干凈,更容易理解。

它與您的_calc函數聲明一起使用而沒有var。

link: function(scope, $element, attr) {
  console.log(scope);
  scope.tform = scope.tmodel;
  var _calctotal = function() {

    var on = new Date(scope.tform.on);
    var off = new Date(scope.tform.off);
    var total = off.getHours() - on.getHours();
    var totalmin = off.getMinutes() - on.getMinutes();
    if (totalmin < 0) {
      total = total - 1;
      totalmin = totalmin * -1;
    }
    if (total < 0) {
      total = "Invalid";
      totalmin = "";
    }
    if (totalmin < 10) totalmin = "0" + totalmin;
    scope.tform.total = total + ":" + totalmin;

  };
  scope.$watch('tform.on', function(newValue, oldValue) {
    // console.log("calc on"+scope.ttitle);
    _calctotal();
  });
  scope.$watch('tform.off', function(newValue, oldValue) {
    // console.log("calc off");
    _calctotal();
  });

  _calctotal();
},

Plnkr上的工作樣本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM