【发布时间】:2017-02-20 14:28:18
【问题描述】:
编辑/更新 我为这个问题添加了一个 plunker: http://plnkr.co/edit/mlYKJQc7zQR0dsvDswMo
我正在将上一页的数据加载到我的页面控制器中的 $scope.visit 中。我想要一个指令,使用数据库中的选项在页面上构造和加载选择元素。这是我目前所拥有的:
app.directive('popList', ['$http', function($http) {
'use strict';
var directive = {
restrict: 'EA',
link: link,
scope: {
popList: '='
},
template: function(elem,attrs) {
return '<select '+
'ng-model="'+attrs.model+'" '+
'ng-options="option.name for option in ddlOpts track by option.id" '+
'required '+
'></select>';
}
};
return directive;
function link(scope, elem, attrs, ctrl) {
var data = {
sTableName: attrs.tbl
};
$http.post('ddl.asmx/populateDDL',data).
then(function(response) {
console.log('This is the value I want to set it to '+scope.$parent.visit.data.state_id);
//ddlOpts loads with no problem
scope.ddlOpts = response.data.d;
});
}
}]);
那么 HTML 看起来像这样:
<div style="width: 5%" class="tableLabel">State</div>
<div
style="width: 27%;"
class="tableInput"
model="visit.data.state_id"
tbl="tblStates"
pop-list="states"
>
</div>
基本上,我传递了包含我的下拉选项的表的名称。我还传入了模型,它将告诉选择默认值是什么(如果有的话。)
我可以毫无问题地将数据作为选项加载到选择元素中。我检查了 ng-model 以确保我有正确的值来匹配 ng-value。我已经尝试过 ng-repeat,然后从 ng-options 重新开始,但我一生都无法获得选择选项来将默认值设置为 ng-model 值。
我开始思考它,因为选择在不同的范围内,它的范围比控制器将数据设置为$ scope.visit。有人可以解释为什么这两个作用域不能相互识别,或者只是解释为什么我不能将我的默认值设置为存储在 ng-model 中的值?
这是页面控制器,以供您参考:
app.controller('demographicsFormCtrl', function($rootScope, $scope, $cookies, $http, $window, $route) {
if (
typeof $cookies.get('visitTrack') === 'undefined' ||
typeof $cookies.get('visitInfo') === 'undefined' ||
typeof $cookies.get('visitData') === 'undefined'
){
window.location.href = "#/";
return false;
}
$scope.visit = {};
$scope.visit.track = JSON.parse($cookies.get('visitTrack'));
$scope.visit.data = JSON.parse($cookies.get('visitData'));
$scope.visit.info = JSON.parse($cookies.get('visitInfo'));
$rootScope.preloader = true;
console.log('controller set');
});
【问题讨论】:
标签: angularjs select angularjs-directive ng-repeat ng-options