Javascript 全局函数的角度问题,自beta 1.3.0b15以来已中断。需要帮忙吗 角JS控制器问题

Javascript 全局函数的角度问题,自beta 1.3.0b15以来已中断。需要帮忙吗 角JS控制器问题,javascript,angularjs,angularjs-scope,angularjs-service,Javascript,Angularjs,Angularjs Scope,Angularjs Service,很抱歉发了这么长的帖子。我相信这是一个简单的问题,我只是工作了一整晚,对它视而不见,但希望有人能帮上忙 这是我的问题。我将XML转换为Json,而不是用angular解析它。我的控制器无法工作,因为它是全局定义的。它在Angular.JS版本1.3.0 beta 15中停止工作。我试过下面列出的东西来修复它,但我没有得到任何帮助 我在英语方面不是很有经验,但我知道很多其他语言,所以这对我来说毫无意义。也许这里有人能帮我。我已经尽力在下面解释了 这个plunker是一个使用angular 1.0

很抱歉发了这么长的帖子。我相信这是一个简单的问题,我只是工作了一整晚,对它视而不见,但希望有人能帮上忙


这是我的问题。我将XML转换为Json,而不是用angular解析它。我的控制器无法工作,因为它是全局定义的。它在Angular.JS版本1.3.0 beta 15中停止工作。我试过下面列出的东西来修复它,但我没有得到任何帮助

我在英语方面不是很有经验,但我知道很多其他语言,所以这对我来说毫无意义。也许这里有人能帮我。我已经尽力在下面解释了

这个plunker是一个使用angular 1.0.4中定义为全局函数的控制器的示例。我还放了一个readme.md来详细解释这些问题


github的angular.js日志中显然已经知道并概述了这个问题

除了简单的演示之外,使用globals是没有帮助的 对于控制器构造函数。这将向
$controllerProvider
重新启用旧行为,但默认情况下禁用此功能

突破性变化:
$controller
将不再在
窗口中查找控制器。
查看控制器的
窗口
的旧行为最初是有意的 用于示例、演示和玩具应用程序。我们发现允许全局控制器 函数鼓励了糟糕的实践,所以我们决定通过 默认

要迁移,请向模块注册控制器,而不是公开它们 作为全球成员:

之前:

函数MyController(){
...
}
之后:

angular.module('myApp',[]).controller('MyController',[function()){
// ...
}]);


上一个链接中给出了以下示例:


函数MyCntrl($scope){
$scope.colors=[
{name:'black',shade:'dark'},
{名称:'white',阴影:'light'},
{名称:'red',阴影:'dark'},
{名称:'blue',阴影:'dark'},
{名称:'yellow',阴影:'light'}
];
$scope.myColor=$scope.colors[2];//红色
}
angular.module('selectExample',[])
.controller('ExampleController',['$scope',function$scope){
$scope.colors=[
{name:'black',shade:'dark'},
{名称:'white',阴影:'light'},
{名称:'red',阴影:'dark'},
{名称:'blue',阴影:'dark'},
{名称:'yellow',阴影:'light'}
];
$scope.myColor=$scope.colors[2];//红色
}]);
  • 姓名:

[我试着在这个时候把它重新定义为一个角函数][3] 因此,基于该示例,我认为我需要更改代码:

var-AppController=function($scope,DataSource){
var SOURCE_FILE=“example.xml”;
xmlTransform=函数(数据){
console.log(“转换数据”);
var x2js=新的x2js();
var json=x2js.xml_str2json(数据);
返回json.xmldata.Categories;
};
setData=函数(数据){
$scope.dataSet=数据;
};
get(SOURCE_文件、setData、xmlTransform);
};
并将其更改为:

myApp.controller('AppController',函数($scope,Datasource){
var SOURCE_FILE=“example.xml”;
xmlTransform=函数(数据){
console.log(“转换数据”);
var x2js=新的x2js();
var json=x2js.xml_str2json(数据);
返回json.xmldata.Categories;
};
setData=函数(数据){
$scope.dataSet=数据;
};
get(SOURCE_文件、setData、xmlTransform);
});

错误:$injector:unpr

未知提供者


未知提供程序:DatasourceProvider您必须按如下方式注入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]);


您正在使用myApp变量,但没有定义它(将模块存储在名为myApp的变量中,或者在运行时让模块定义控制器)

非常感谢您的帮助。我来试试。?我以前试过一次,有几个版本,我一直都会犯同样的错误。。。嘿,我很感激。解决方案就在这里:我需要dovar myApp=。。。我也有服务。我真的很感谢你的帮助!不过,我相信这个答案也会奏效。再次感谢你的帮助。我的头一直撞在墙上!非常感谢您的帮助,我将尝试它并让您知道它是如何工作的。我得到了相同的未捕获错误[$injector:modulerr],这也给了我一个语法错误,意外字符串。请查看我修改的答案。现在它有意义了。谢谢你,伙计!我还必须做var myApp=。。。。非常感谢你的帮助!
 var myApp = angular.module('myApp',['myApp.service']);