如何在指令中设置选择框的默认值

时间:2014-04-25 05:46:38

标签: angularjs angularjs-directive angularjs-ng-repeat

我的指令有点麻烦。我加载有关用户角色的数据。我想在选择加载控制器时执行此操作,该控制器附加到用户的角色。我尝试使用scope.SelectedValue进行初始化,但是某些内容无法正常工作,或者我需要以其他方式进行初始化。

var app = angular.module('app');

app.directive('roleDirective', ['userRepository', function (userRepository) {
    return {
        restrict: 'E',
        template: '<select id="roles" ng-model="SelectedValue" ng-change="Change()">' +
                        '<option ng-repeat="role in Roles" value="{{role.RoleId}}">{{role.RoleName}}' +
                        '</option>' +
                  '</select>',
             link: function (scope, elem, attrs) {

            if (scope.User.webpages_Roles.length > 0) {
                scope.SelectedValue = scope.User.webpages_Roles[0].RoleId;
            }

        }
    }
}]);

1 个答案:

答案 0 :(得分:0)

真的,这种东西似乎属于工厂和控制器。该指令中的链接函数主要用于DOM操作,但是您正在进行模型操作并使您的生活变得更加困难。

但是要回答你的问题,由于链接功能的时间安排与编译模板有关,你会遇到麻烦。

要解决问题,请尝试以下方法:

  if (scope.User.webpages_Roles.length > 0) {
      // The true param at the end forces a scope.$apply() / digest cycle
      $timeout(function () {
          scope.SelectedValue = scope.User.webpages_Roles[0].RoleId;
      }, 100, true);
  }

理想情况下,您应该在.factory中使用“用户”模型,其中包含一些方便的方法,例如this plunkr