2014-04-25 54 views
0

中設置選擇框的默認值我的指令存在一些問題。我加載關於用戶角色的數據。我想要在加載控制器被選擇時附加到用戶的角色。我嘗試使用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; 
      } 

     } 
    } 
}]); 

回答

0

真的,這種東西似乎屬於工廠和控制器。指令中的鏈接函數主要用於DOM操作,但是您正在進行模型操作並使您的生活更加困難。

但是,要回答你的問題,你有麻煩,因爲鏈接功能與編譯模板的時間。

要hackishly解決您的問題試試這個:

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); 
    } 

理想情況下,你應該在有一些關於它的方便易用的方法,如this plunkr

+0

謝謝您.factory「用戶」的模式,它的工作。我改變我的控制與你的消化他工作沒有$超時 – user3083705