热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AngularJS选择了插件,选择:更新不起作用,在浏览器中工作

如何解决《AngularJS选择了插件,选择:更新不起作用,在浏览器中工作》经验,为你挑选了1个好方法。

我已将所选插件集成到我的angularjs应用程序中.我的app.js看起来像这样.

myApp.directive('chosen', function() {

    var linker = function (scope, element, attr) {
        scope.$watch('countriesList', function() {
            $('#countries').trigger('chosen:updated');
            console.log('I acctuallty get in here');
        })
        element.chosen();
    };

    return {
        restrict: 'A',
        link: linker
    };
})

我的选择看起来像这样

问题是当页面首次加载时,选择中不显示任何内容.检查元素时有选项.

chosen:updated似乎没有用.我把console.log()它放在手表里,它正在开火.如果我.trigger('chosen:updated')在浏览器中运行它可以很好地工作.我确实尝试过,element.trigger但那也没用.真令人沮丧!



1> tasseKATT..:

在调用之前,您需要让Angular(实际上是浏览器)正确地呈现选择chosen.您可以使用setTimeout或Angular 来完成此操作$timeout.

app.directive('chosen', function($timeout) {

  var linker = function(scope, element, attr) {

    $timeout(function () {
      element.chosen();
    }, 0, false);
  };

  return {
    restrict: 'A',
    link: linker
  };
});

第三个参数false可以防止不必要的摘要循环.

演示: http ://plnkr.co/edit/9Afq65uatTjnb4J6ICcB?p=preview

如果您需要动态添加或删除项目,这将有效:

app.directive('chosen', function($timeout) {

  var linker = function(scope, element, attr) {

    scope.$watch('countriesList', function() {
      $timeout(function() {
        element.trigger('chosen:updated');
      }, 0, false);
    }, true);

    $timeout(function() {
      element.chosen();
    }, 0, false);
  };

  return {
    restrict: 'A',
    link: linker
  };
});

演示: http ://plnkr.co/edit/rEBu6d3HtaNhThWidB5h?p=preview

请注意,默认情况下$watch使用引用相等性来确定是否执行侦听器.如果向数组添加项,则变量countriesList仍将引用相同的数组,因此不会执行侦听器.

true传递给的第三个参数$watch使得它使用angular.equals而不是引用相等.


推荐阅读
author-avatar
萌嗒嗒滴妹妹惹人爱i_121
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有