来自全局函数的Angular问题,自测试版1.3.0b15以来中断.需要帮助
Issue with Angular from global functions, broken since beta 1.3.0b15. Need help please
Angular JS控制器问题
抱歉发了这么长的帖子。我相信这是一个简单的问题,我刚刚工作了一整夜,对此视而不见,但希望有人能帮忙!
这是我的角度示例问题。我将XML转换为Json,而不是使用angular进行解析。我的控制器无法工作,因为它是全局定义的。它在Angular.JS 1.3.0 beta 15版本中停止工作。我试过下面列出的东西来修复它,但我在哪里都找不到。
我在角度方面不是很有经验,但我知道很多其他语言,所以这对我来说没有意义。也许这里有人可以帮助我。我已经尽力在下面解释了。
这个plunker是它与angular 1.0.4中定义为全局函数的控制器一起工作的一个例子。我还放了一个readme.md,详细解释了这些问题!
http://plnkr.co/edit/fLgVHV1gJSigIB6jfZDH
这个问题显然是已知的,并在angular.js日志的github上进行了概述。
feat($controller):禁用全局控制器构造函数
除了简单的演示外,使用全局变量是没有帮助的用于控制器构造函数。这为$controllerProvider
添加了一个新方法以重新启用旧行为,但默认情况下禁用此功能。
断裂变化:CCD_ 2将不再在CCD_ 3上查找控制器。在window
上查找控制器的旧行为最初是为了用于示例、演示和玩具应用程序。我们发现允许全局控制器函数鼓励不良做法,因此我们决定通过违约
若要迁移,请使用模块注册控制器,而不是公开它们作为全局:
之前:
function MyController() {
...
}
之后:
angular.module('myApp', []).controller('MyController', [function() {
// ...
}]);
你可以在这里看到关于断裂变化的注释
ANGULAR.JS在这里进一步解释
以下示例在上一个链接中给出:
<example>
<example module="selectExample">
<file name="index.html">
<script>
function MyCntrl($scope) {
$scope.colors = [
{name:'black', shade:'dark'},
{name:'white', shade:'light'},
{name:'red', shade:'dark'},
{name:'blue', shade:'dark'},
{name:'yellow', shade:'light'}
];
$scope.myColor = $scope.colors[2]; // red
}
angular.module('selectExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.colors = [
{name:'black', shade:'dark'},
{name:'white', shade:'light'},
{name:'red', shade:'dark'},
{name:'blue', shade:'dark'},
{name:'yellow', shade:'light'}
];
$scope.myColor = $scope.colors[2]; // red
}]);
</script>
<div ng-controller="MyCntrl">
<div ng-controller="ExampleController">
<ul>
<li ng-repeat="color in colors">
Name: <input ng-model="color.name">
[我试图在这个plunker中将其重新定义为角度函数][3]
因此,基于这个例子,我认为我需要将代码从更改为
var AppController = function($scope, DataSource) {
var SOURCE_FILE = "example.xml";
xmlTransform = function(data) {
console.log("transform data");
var x2js = new X2JS();
var json = x2js.xml_str2json(data);
return json.xmldata.Categories;
};
setData = function(data) {
$scope.dataSet = data;
};
DataSource.get(SOURCE_FILE, setData, xmlTransform);
};
并将其更改为:
myApp.controller('AppController', function($scope, Datasource) {
var SOURCE_FILE = "example.xml";
xmlTransform = function(data) {
console.log("transform data");
var x2js = new X2JS();
var json = x2js.xml_str2json(data);
return json.xmldata.Categories;
};
setData = function(data) {
$scope.dataSet = data;
};
DataSource.get(SOURCE_FILE, setData, xmlTransform);
});
当我这样做的时候,我会得到这个错误:
错误:$injector:unp
未知提供商
未知提供程序:数据源提供程序<-数据源<-AppController
说明
这是一个非常不想要的工作!但有效
需要注意的一点是,引用angular.js github:
虽然不推荐,但您可以重新启用旧的行为,如下所示:
angular.module('myModule').config(['$controllerProvider', function($controllerProvider) {
// this option might be handy for migrating old apps, but please don't use it
// in new ones!
$controllerProvider.allowGlobals();
}]);
然而,我不希望有这个全局函数。我不确定这个问题是否与我正在使用的XML2JSON脚本有关。我希望有人能帮助我。
谢谢!
您必须注入DateSource factory
对象,如下所示:
myApp.controller('AppController', ['$scope', 'DataSource', function($scope, DataSource) {
...
}]);
将其更改为
myApp.controller('AppController', ['$scope', '$Datasource', AppController]);
基本上,第二个参数应该是一个数组,其最后一个参数应该为提供控制器定义的函数。
编辑
要修复myApp问题,请使用以下语法
angular.module('myApp').controller('AppController', ['$scope', '$Datasource', AppController]);
或
var myApp = angular.module('myApp',['myApp.service']);
使用myApp变量时没有定义它(将模块存储在名为myApp的变量中,或者在运行时获取模块以定义控制器)
- 高亮显示与数组字符串一起使用时文本插件中断
- AngularJS ui路由器html5模式中断路由
- 递归函数中断
- Javascript-在文本区域中断,但不在段落中中断
- 在内部映射值时渲染方法中断
- 中断功能
- 使用ajax获取通过FTP上传的文件的文件大小——试图防止ajax中断自身
- 遇到错误后,更改检测似乎中断
- 我如何防止错误“;未捕获(在promise中)DOMException:play()请求被对pause()的调用中断&”
- NG-重复中断指令模型绑定
- 三元条件中出现意外的令牌中断
- 中断javascript循环
- 包含数组的对象的QML ListModel追加中断
- dojoConfig中的CacheBust中断路径
- 在JavaScript中中断forEach方法的首选方法
- 当使用return语句时,循环不会中断
- 即使被信号处理程序中断,node.js代码也会一直运行到完成吗
- javascript在其中设置空格时会中断
- console.assert失败时中断chrome调试器
- 来自全局函数的Angular问题,自测试版1.3.0b15以来中断.需要帮助