我在从我的指令 Angular 访问控制器的范围时遇到问题
I am having an issue accessing the scope of my controller from my directive Angular
我无法访问从服务器获得的设置,我已经设置了我的应用程序并且我的指令正在工作。我正在使用$http
从服务器获取一个 js 文件,该文件为我的应用程序提供了一堆设置,请求是从我的指令的控制器发送的,但是当我执行console.log(scope)
时我无法进入范围,它向我显示了我的范围,但是当我尝试从指令访问我范围内的对象时,我只得到一个空值?
<!DOCTYPE html>
<html ng-app="uploader">
<head>
<title></title>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-resource.min.js"></script>
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="app/uploader.js"></script>
<style>
html, body { margin:0; padding:0; height:100%; background-color:#e3e3e3; }
</style>
</head>
<body dropzone='{"url":"app/settings.js"}'>
</body>
</html>
我的应用/上传器.js文件
var app = angular.module("uploader", []);
app.directive('dropzone', function () {
return {
restrict: "A",
controller: function ($scope, $http) {
$scope.getSettings = function (url) {
$http.get(url).then(function (response) {
$scope.settings = response.data;
//console.log($scope.settings);
});
}
},
link: function (scope, element, attr) {
var settings = JSON.parse(attr.dropzone);
scope.getSettings(settings.url);
console.log(element);
console.log(attr);
console.log(scope);
function handleDragEnter(e) {
console.log(e)
//console.log(scope.settings);
}
function handleDragOver(e) {
console.log(e)
//console.log(scope.settings);
} function handleDrop(e) {
console.log(e)
//console.log(scope.settings);
}
element.bind('dragenter', handleDragEnter);
element.bind('dragover', handleDragOver);
element.bind('drop', handleDrop);
console.log(scope.settings);
}
}
});
> 由于$scope.getSettings()
是异步的,因此在事件发生时可能尚未设置$scope.settings
。 您可以更新 link
函数,使其等到调用完成,然后再实际绑定事件。
link: function (scope, element, attr) {
var settings = JSON.parse(attr.dropzone);
scope.getSettings(settings.url).then(function() {
function handleDragEnter(e) {
console.log(e);
}
function handleDragOver(e) {
console.log(e)
}
function handleDrop(e) {
console.log(e)
}
element.bind('dragenter', handleDragEnter);
element.bind('dragover', handleDragOver);
element.bind('drop', handleDrop);
console.log(scope.settings);
});
}
此外,更新getSettings
以返回承诺。
$scope.getSettings = function (url) {
return $http.get(url).then(function (response) {
$scope.settings = response.data;
});
};
相关文章:
- AngularJS控制器范围
- FileReader加载不在控制器范围Angular 2内
- Angular ES6控制器范围
- 离子单选按钮-控制器范围无法识别更改
- Angular:控制器范围内的可重用功能
- 角度嵌入和访问控制器范围
- 如何从 ng-repeat(ng-repeat)中的指令访问控制器范围
- 如何在Angular JS的这个小游戏中将对象同步到控制器范围
- AngularJS - 访问 Web 应用中的顶级控制器范围
- 应用程序的主控制器范围
- 设置另一个控制器范围变量而不使用 angular.element (Angularjs)
- 如何根据信号器请求的结果设置控制器范围
- 角度控制器范围项作为范围函数的子项
- 在 angularjs 控制器范围内声明函数和属性,但不附加到$scope
- AngularJS 控制器范围问题
- 理解angularJS中的控制器范围
- 如何将项目列表从创建许多选择标记的指令添加到控制器范围
- Angularjs:如何在指令中访问控制器范围
- 当使用Konacha进行测试时,Ember无法在didLoad回调中访问控制器范围
- 最好的做法是从出厂功能设置控制器范围变量