angular+selecte2(angular ng-repeat渲染)

时间:2021-11-18 15:11:51

一、页面代码

<select id="sponsorId" select2 ng-model="sponsorSelectedObj" ng-change="sponsorSelectedChange(sponsorSelectedObj)">

  <option value="">共同创办人</option>

  <!--注意,这里不是在select标签写的ng-option,而是在option标签中使用的ng-repeat,因为下面的directive指令是只对ng-repeat有效的,对ng-option无效-->

  <option ng-repeat="s in sponsorSelected" value="{{s.ID}}" on-finish-render-filters>

</select>

二、js代码

(1)指令

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

      return {
        restrict: 'A',
        link: function(scope, element, attr) {
          if (scope.$last === true) {
            $timeout(function() {
             scope.$emit('ngRepeatFinished');
            });
           }
        }
      };
   });

(2)写在Controller里面的js,直接写在Controller下面的,不要写在Controller的某个方法,直接写在Controller里面就行了。ngRepeatFinished要和上面蓝色的字一致页面用的"-",js用驼峰的方式

  $scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
      //下面是在table render完成后执行的js,下面的内容可以删掉,写自己的内容
      angular.forEach($scope.sponsorSelected,function(item,key){

        if(item.ID==$scope.topic.SponsorID){

          $scope.sponorSelectedObj = item.ID;
          $scope.topic.sponsorID = $scope.sponsorSelectedObj;

          $("#sponsorId").val(item.ID).selecte2();//编辑的时候,默认选中下拉框的其中一个值

        }

      });

    });
  });

注意:当我们在angularJs的项目中用到一些jQuery的插件时,由于angular还没加载完成,插件的js会失效,这是我们就需要用到渲染,使页面加载完成之后,才调用插件的Js。这个渲染对angular的  ng-repeats是通用的,只需要在$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent)中写自己的逻辑代码即可。