在ngModel中更改后刷新bootstrapswitch

时间:2016-10-23 22:39:28

标签: javascript angularjs bootstrap-switch

我使用了角度1.4.x和Bluradmin模板。问题与bootstrapswitch custom directive

有关
(function () {
  'use strict';

  angular.module('BlurAdmin.pages.form')
      .directive('switch', switchDirective);

  /** @ngInject */
  function switchDirective($timeout) {
    return {
      restrict: 'EA',
      replace: true,
      scope: {
    ngModel: '='
      },
      template: function(el, attrs) {
    return '<div class="switch-container ' + (attrs.color || '') + '"><input type="checkbox" ng-model="ngModel"></div>';
      },
      link: function (scope, elem, attr) {
    $timeout(function(){
      var input = $(elem).find('input');
      input.bootstrapSwitch({
        size: 'small',
        onColor: attr.color
      });
      input.on('switchChange.bootstrapSwitch', function(event, state) {
        scope.ngModel = state;
        scope.$apply();
      });

    }, 2000);
      }
    };
  }
})();

它只在渲染DOM期间正确加载一次,然后在更改ngModel之后,它不会刷新。我怎样才能实现它? 顺便说一下,我可以手动切换它,但这不是重点。

1 个答案:

答案 0 :(得分:0)

解决方案很简单:不要使用此指令。而是使用: https://github.com/JumpLink/angular-toggle-switch (特别是查看它的已禁用属性,这在ngModel发生更改时有效。替代解决方案没有此功能:https://github.com/frapontillo/angular-bootstrap-switch/issues/96