【问题标题】:Angular 1.5.8 - How do I perform an action when angular finishes binding data to an element?Angular 1.5.8 - 当 Angular 完成将数据绑定到元素时,如何执行操作?
【发布时间】:2016-09-13 23:10:03
【问题描述】:

我有一个角度应用程序,我想等到数据绑定到选择下拉列表,然后再将 jquery 方法应用于选择下拉列表。

在我之前的相关问题中,我能够使用以下代码成功填充下拉列表。

 <select name="shippingState" id="shippingState" ng-model="accountAddresses.shippingState"  ng-options ="state.abbreviation for state in states track by state.abbreviation" class="state form-control" size="1">
                       </select>

AngularJS (1.5.8) - How do I populate a select option list directly from within controller that gets a json object?

现在我想应用 jquery 方法(自定义选择框下拉样式库)。

加载数据时,我可以在浏览器控制台中手动应用该方法。 问题是我只能手动在浏览器控制台中执行操作。

当下拉数据正在获取时,我无法在 Angular 中运行相同的方法。

问题: 如何在 Angular 中完成数据绑定后触发操作?

编辑 - 我创建了一个指令并修改了我的 html 以触发该指令。

我仍然没有得到自定义样式的元素。

链接到根控制器的指令

  directive('onDataBind', function (id) {
                        alert(id);
                          function link(elem, id) {
                            elem.ready(function(id){
                              $scope.CreateDropDown(id);
                              });
                            }
                          })

HTML 修改

           <select name="billingState" id="billingState" ng-model="accountAddresses.billingState"  ng-options ="state.abbreviation for state in states track by state.abbreviation" on-data-bind="CreateDropDown('billingState')" class="state form-control" size="1">
           </select>

在范围级别创建下拉菜单

   $scope.CreateDropDown = function(id){
      $("#"+id).selectbox();
      //selectbox is the following library - https://github.com/olivM/jQuery-Selectbox
    }

【问题讨论】:

  • 使用指令和$timeout()
  • @Lex,你打败了我。谢谢您的帮助。请查看修改。
  • 我还没有对这个指令采取任何行动。我需要将作用域注入函数链接吗?
  • 什么是CreateDropDown()?那是你范围内的一种方法?我以为你想调用一些 jQuery 函数?此外,这不是您创建指令的方式。
  • 指令构造函数都错了,指令应该返回一个具有link .. template 等属性的对象

标签: jquery angularjs


【解决方案1】:

以下指令代码有助于解决该问题。我按照建议使用了指令和超时。

directive('onDataBind', function () {
                  function link(scope, elem) {
                    var id = elem.attr("id");
                    elem.ready(function(){
                     setTimeout(function () {
                       $("#"+id).selectbox();
                     }, 1000);
                      //$('#'+id + ' .sbHolder > .sbOptions').wrap("<div class='optionsDiv'></div>");
                      //$("#"+id + " .sbHolder > a.sbToggle, "+id+" + .sbHolder a.sbSelector").wrapAll("<div class='selectDiv'></div>");
                    })(id);
                    }
                    return {
                      link: link,
                      restrict: 'A',
                    };
                  })

【讨论】:

  • 除了超时,有没有办法让“id”在 elem.ready 中看到,而不是我在两条注释线下方的方式?
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多