- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看起来像这样。我加载我的页面,我的表单显示获取的值。这些值由 http 服务获取。表单顶部有我的自定义指令(选择框):
.directive('categorySelectBox', function(){
return {
restrict: "A",
replace: true,
scope: {
// all properties here need to be added to
// the directive in order to be picked up
taxonomies: '='
,chosen: '='
},
templateUrl: "ngapp/js/tpl/select-box.html"
};
})
指令模板:
<select class="form-control"
ng-options="option.label for option in taxonomies track by option.value"
ng-model="chosen"
chosen="chosen"
taxonomies="taxonomies">
<option value="">Please select a category</option>
我的 Controller 是这样的:
.controller('DashboardCtrl', ['$scope', 'DbResourceSrv', function($scope, DbResourceSrv){
$scope.$watch('cid', function() {
$scope.formBusy = true;
$scope.c = DbResourceSrv.getDbResource('response.php', 'company', $scope.cid)
.then(function(data) {
$scope.c = data;
angular.forEach(data, function(value, key) {
$scope.c.push({key: value});
});
});
$scope.tax = DbResourceSrv.getDbResource('response.php', 'taxonomy', '')
.then(function(data) {
$scope.taxonomies = [];
$scope.chosen = [];
angular.forEach(data, function(value, key) {
$scope.taxonomies.push({label: value.name, value: value.term_taxonomy_id});
});
// subtract 1 because $scope.c is 0-based
var catId = $scope.c.category - 1;
$scope.chosen = $scope.taxonomies[catId];
$scope.formBusy = false;
});
});
$scope.updateCompany = function(cid) {
var formData = $scope.c;
$scope.formBusy = true;
$scope.doCompanyUpdate = DbResourceSrv.updateDbResource('response.php', cid, formData)
.then(function(response) {
$scope.formBusy = false;
});
};
}]);
通常我确实会看到我的类别(也是从数据库中获取的,只是在单独的调用中 $scope.tax
现在,我尝试使用 $watch
选择范围属性,但它没有改变任何内容。我还尝试使用指令 Controller 来确保在那里设置 scope.chosen
,但在我看来,即使我使用 promise 加载两个进程 - 当一个进程在另一个进程之前加载时,类别获取会失败因为他们绑得太紧了。
有任何代码改进建议,以便我可以避免看到页面加载时选择的默认请选择类别
选项吗?
最佳答案
你是对的:你有两个 promise 不能保证按顺序解决,这是一个问题。在第二个“击败”第一个的情况下,它将无法计算 catId
,因为 $scope.c
尚未填充。
$scope.c = DbResourceSrv.getDbResource('response.php', 'company', $scope.cid)
.then(function(data) {
$scope.c = data; // not guaranteed to be set when it's needed
});
$scope.tax = DbResourceSrv.getDbResource('response.php', 'taxonomy', '')
.then(function(data) {
var catId = $scope.c.category - 1;
$scope.chosen = $scope.taxonomies[catId];
});
解决方案是使用 $q.all
,它接受一个 Promise 数组作为参数,并返回另一个 Promise,该 Promise 仅当所有传入的 Promise 解析时才得到解析。
它看起来像这样:
$q.all([$scope.c, $scope.tax]).then(function(results){
var catId = $scope.c.category - 1;
$scope.chosen = $scope.taxonomies[catId];
});
您应该能够保留大部分现有的 Promise 回调 - 只需移动依赖于已返回的 AJAX 请求的任何内容即可。
关于javascript - ngSelect 元素上具有隔离范围属性的指令,用于预选择选项 : It randomly loses value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961807/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!