我的指令有点麻烦。我加载有关用户角色的数据。我想在选择加载控制器时执行此操作,该控制器附加到用户的角色。我尝试使用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 :(得分: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