AngularJS模块在放入promise中时出错
AngularJS modulerr when placed inside promise
AngularJS nOb在此处。我有一个从DynamoDB获取数据的函数。此函数的结果需要填充到HTML SELECT列表中。
以下是相关的HTML:
<div ng-app="myapp">
<div ng-controller="myctrl">
<select ng-model="roadname" ng-options="x for x in roadNames"></select>
</div>
</div>
以下是相关故障JS:
var function_AWS_get = new Promise(function(resolve, reject) {
resolve(get_result_array);
} // End of Function
// Call the Function with promise and populate data in to the FORMs
function_AWS_get.then( function(result) {
var app = angular.module('myapp', []);
app.controller('myctrl', function($scope) {
$scope.roadNames = result;
});
}, function(err) {
$scope.roadNames = ["Error"];
});
如果我将angular应用程序控制器移动到promise功能之外,则没有错误,并且表单内容被填充:
这是工作JS:
var function_AWS_get = new Promise(function(resolve, reject) {
resolve(get_result_array);
} // End of Function
// Call the Function with promise. But, move angular code outside the promise
function_AWS_get.then( function(result) {
}, function(err) {
$scope.roadNames = ["Error"];
});
var app = angular.module('myapp', []);
app.controller('myctrl', function($scope) {
$scope.roadNames = ["Success"];
});
我做错了什么?
var app = angular.module('myapp', []);
app.controller('myctrl', function($scope) {
$scope.roadNames = ["Success"];
});
你必须保持你的角度模块在所有功能之外。这是你的起点,它不应该在任何承诺/功能内
在控制器内部进行ajax调用并将结果呈现为
如果您尝试在内部注册角度控制器。那么您将永远无法访问响应对象,这就是$scope.roadNames未初始化的原因。这也是在所有功能之外注册所有控制器/服务/指令的最佳实践。并且总是编写angular服务,并将负责与服务器交互的代码放在那里。
您可以使用以下代码:
服务.js
app.service('MyService', function() {
var function_AWS_get = new Promise(function(resolve, reject) {
resolve(get_result_array);
};
this.getRoadNames = function(successHandler, failureHandler) {
function_AWS_get.then( function(result) {
successHandler(result);
}, function(err) {
failureHandler(err);
});
};
});
控制器
app.controller('myctrl', function($scope, MyService) {
function fetchRoadlistSuccessHandler(response) {
$scope.roadNames = response;
}
function fetchRoadlistFailureHandler(err) {
$scope.roadNames = err;
}
MyService.getRoadNames(fetchRoadlistSuccessHandler, fetchRoadlistFailureHandler);
});
在这种情况下,您希望使用angular.bootstrap
方法手动引导应用程序:
// Call the Function with promise and populate data in to the FORMs
function_AWS_get
.catch(function() {
return ["Error"];
})
.then(function(result) {
var app = angular.module('myapp', []);
app.controller('myctrl', function($scope) {
$scope.roadNames = result;
});
// Bootstrap the app
angular.bootstrap(document.querySelector('#myapp'), [app.name])
});
查看下面的简单演示。
var get_result_array = ['One', 'Two', 'Three'];
var function_AWS_get = new Promise(function(resolve, reject) {
resolve(get_result_array);
});
// Call the Function with promise and populate data in to the FORMs
function_AWS_get
.catch(function() {
return ["Error"]
})
.then(function(result) {
var app = angular.module('myapp', []);
app.controller('myctrl', function($scope) {
$scope.roadNames = result;
});
// Bootstrap the app
angular.bootstrap(document.querySelector('#myapp'), [app.name])
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div id="myapp">
<div ng-controller="myctrl">
<select ng-model="roadname" ng-options="x for x in roadNames"></select>
</div>
</div>
相关文章:
- 使用promise和mongoose对文档进行排序
- javascript中的数组出错
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 测试Angular Service解决错误回调中的promise
- 在Meteor项目中安装并包含npm模块后出错
- 解析JSON并从中删除对象会出错
- AngularJS指令出错-无法读取属性'编译'的未定义
- 节点协同与生成器和Promise并行流量控制
- 使用javascript在MVC中查找网格长度时出错
- 尝试调用AngularJS上的函数时出错
- 根据是否解析了 Promise 从函数返回值
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 全局安装gull后出错
- 我在代码点火器中出错
- 将一个方法转换为promise:Nodejs
- 扩展 JavaScript Promise 时出错
- 在另一个函数中调用promise函数时出错
- 可能未处理在promise中返回promise时出错
- 使用Mocha测试Promise时出错'TypeError: Cannot read property '
- AngularJS模块在放入promise中时出错