用r.js打包依赖,发现angular报错,我是使用require引入angular文件的


angular.js文件


 define(['angular'],function(){
    angular.module("todosa",[]).controller("todosAngular",function($scope){
        $scope.sum=new Array();
        var fn=function(){
            if($scope.sum.length<10 ){
                if($scope.arr!=="" && $scope.arr!==undefined){
                    $scope.sum.unshift($scope.arr);
                    $scope.arr="";
                }
            }else{
                alert("已经10个了,不能在增加了。");
                $scope.arr="";
            }
        }
        $scope.todosAclick=function(){
            fn();
        };
        $scope.todosAremove=function(){
            $scope.sum=[];
            $scope.arr="";
        };
        $scope.todosAre=function(s){
            $scope.sum.splice(s,1);
        };
        $scope.akeydown=function(e){
            if(e.keyCode==13) fn();
        };
    });
})

main.js,reuiqre入口文件


 require.config({
    baseUrl:"../js/",
    paths:{
        'jquery':'lis/jquery.min',
        'avalon':'lis/avalon.min',
        'angular':'lis/angular.min'
    }
});
require(['todosAngular','todosjs','todosAvalon','todosJquery'],function(){
});

R.js


 ({
    baseUrl:".",
    name:'todosmain',
    paths:{
        'jquery':'lis/jquery.min',
        'avalon':'lis/avalon.min',
        'angular':'lis/angular.min'
    },
    excludeShallow:["angular","avalon","jquery"],
    out:"todos-Set.js"
})

报错信息


 Error: [$injector:unpr] http://errors.angularjs.org/1.4.3/$injector/unpr?p0=eProvider%20%3C-%20e%20%3C-%20todosAngular
    at Error (<anonymous>)
    at http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:6:416
    at http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:40:375
    at Object.d [as get] (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:38:364)
    at http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:40:449
    at d (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:38:364)
    at Object.e [as invoke] (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:39:124)
    at P.instance (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:80:122)
    at S (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:61:199)
    at g (http://127.0.0.1:4000/sunshine/add/js/lis/angular.min.js:54:384)

这是我写的todos小demo而已,想尝试用r.js打包,但是angular不停保存。没用r.js打包前基本没有报错。
demo地址:
为打包
打包后

require angularjs

leon.SK 10 years, 1 month ago

在你用 r.js 打包之前,先用 ngAnnotate 处理一下依赖注入的语法(这样你就用不着那种数组模式的语法了),当然最好使用构建工具把这个过程自动化了。

恋文★86 answered 10 years, 1 month ago

1.我大概知道你的错误在哪里了,看报错的信息应该是依赖注入的问题,你要需要把依赖的那些东西注入到你的控制器,像上面的$scope是要注入到控制其中的,应该这样写:App.controller("CtrlName",["$scope",function($scope){...}])因为如果不这样的话,打包的时候就破坏了它的结构,所以会报错;我在用手机给你回复,不方便,如果有时间我用电脑给你更详细的解释。

(不知道为什么修改之后老是乱码。。。)

田島悠一郎 answered 10 years, 1 month ago

Your Answer