角度投掷异常'模块无法加载'!

时间:2017-11-16 10:07:37

标签: javascript jquery angularjs

我试图清理我的角度应用代码。所以我将所有控制器都移到了自己的文件中。但当我移动控制器时,我的主应用程序停止工作并开始抛出下面的例外 -

  

错误:$ injector:modulerr   模块错误

然后我尝试搜索模块无法加载但没有运气的原因。

main.js /*File where app module is declared*/

var app = angular.module('app', ['ngRoute','thatisuday.dropzone','UserController','LinkController','articleController']);

我尝试为控制器文件注入依赖项。

控制器:

链接控制器

var app = angular.module('app');

app.controller('LinkController', ['$scope','$http','$sce',function ($scope, $http, $sce) {
/*Sce declaration required for proxy settings*/
$scope.renderHtml = function (html_code) {
    return $sce.trustAsHtml(html_code);
};

$scope.trustSrc = function (src) {
    return $sce.trustAsResourceUrl(src);
};

/*First AJAX request which gets all the links and categories for the user*/

$http({
    method: 'GET',
    url: '/users'
}).then(function successCallback(response) {

    $scope.user = response.data;

}, function errorCallback(response) {

});

$scope.getUser = function () {
    $http({
        method: 'GET',
        url: '/users'
    }).then(function successCallback(response) {

        $scope.user = response.data;

    }, function errorCallback(response) {

    });
};


$http({
    method: 'GET',
    url: '/links'
}).then(function successCallback(response) {

    this.orderProp = 'age';

    /*the response is saved in scope variables*/
    $scope.links = response.data[0];
    $scope.categories = response.data[1];
    $scope.categorytolink = response.data[2];


}, function errorCallback(response) {
    console.log('There was a problem! Refresh!');
});

/*AJAX request for getting the recommendations according to the most viewed stars*/

$http({
    method: 'GET',
    url: '/recommendations/top'
}).then(function successCallback(response) {

    $scope.recommendations = response.data;

}, function errorCallback(response) {

});

/*AJAX request when a user clicks a link retrieves the link data*/
$scope.getLinkData = function (link) {
    $http({
        method: 'GET',
        url: "/proxy",
        headers: {
            "X-Proxy-To": link.rss_link
        }
    }).then(function successCallback(response) {

        /*AJAX request: add a star to the link*/

        $http.post('/links/' + link.id + '/views/add', {'link': link}).then(function successCallback(data, status, headers, config) {

            // Manually increment star for link just clicked

            var $data;

            $data = data.data;

            $scope.link = $data;

            console.log('200 OK! Star added');

        }, function errorCallback() {

            console.log('Error!');

        });

        /*The data will be retrieved and will be sorted according to the requirements of welcome.blade*/

        $myXml = response.data;

        $xmlObj = $.parseXML($myXml);

        $newsItems = [];

        $channelImage = $($xmlObj).find("channel>image");

        /*the information of the link is sorted */

        $linkData = {
            "title": $channelImage.find("title").text(),
            "link": $channelImage.find("link").text(),
            "imgurl": $channelImage.find("url").text()

        };

        /*the data is sorted below*/

        $.each($($xmlObj).find("item"), function (index, value) {
            $newsItems.push({
                "title": $(value).find("title").text(),
                "description": $(value).find("description").text(),
                "link": $(value).find("link").text(),
                "date_published": moment($(value).find("pubDate").text()).format('MMMM Do YYYY'),
                "time_published": moment($(value).find("pubDate").text()).format('h:mm:ss a'),
                "guid": $(value).find("guid").text()
            })
        });

        $scope.newsItems = $newsItems;

        $scope.linkData = $linkData;

    }, function errorCallback(response) {

    });
};


/*Create a category private to the user*/

$scope.create_category = function (category) {

    /*AJAX request: adds a new category*/
    $http.post('/categories/new', {'category': category}).then(function successCallback(response) {

        /*AJAX request: Updates the categories for the use of new category*/

        $http({
            method: 'GET',
            url: '/categories'
        }).then(function successCallback(response) {

            $scope.categories = response.data;

        }, function errorCallback(response) {

        });
    }, function errorCallback(response) {

    });

};
}]);

用户控制器

    var app = angular.module('app');

app.controller("UserController", ['$scope','$http','$sce', function ($scope, $http, $sce) {

/*Sce declaration required for proxy settings*/
$scope.renderHtml = function (html_code) {
    return $sce.trustAsHtml(html_code);
};

$scope.trustSrc = function (src) {
    return $sce.trustAsResourceUrl(src);
};

$scope.dzOptions = {
    paramName: "file",
    dictDefaultMessage: "<h4><i class='fa fa-camera'></i> <b>Upload</b></h4>",
    createImageThumbnails: false,
    autoDiscover: false
};

$scope.dzCallbacks = {
    'sending': function (file, xhr, formData) {
        formData.append('_token', $('#csrf-token').val());
    },
    'success': function (file, response) {
        $scope.user = response;
        $.notify("Profile photo changed!", "success", {autoHide: true, autoHideDelay: 500});
    }
};

/*Update user info*/
$scope.updateUser = function () {
    /*AJAX request: update user info*/
    $http.post('/users/update', {
        'name': $scope.user.name,
        'username': $scope.user.username,
        'email': $scope.user.email
    }).then(
        function successCallback(data) {
            $scope.user = data;
            $.notify("User updated!", "success", {autoHide: true, autoHideDelay: 500});
            console.log('200 OK! User updated');
        }, function errorCallback() {
            console.log('Error!');
        });
};

}]);

物品管理员

    var app = angular.module('app');

app.controller("articleController", ['$scope','$http','$sce', function ($scope, $http, $sce) {

/*Sce declaration required for proxy settings*/
$scope.renderHtml = function (html_code) {
    return $sce.trustAsHtml(html_code);
};

$scope.trustSrc = function (src) {
    return $sce.trustAsResourceUrl(src);
};

/*Populates the comments for particular
 * */
$scope.populatecomments = function (newsItem) {
    $http({
        method: 'GET',
        url: '/articles/' + newsItem.guid + '/comments'
    }).then(function successCallback(response) {

        $scope.comments = response.data;

    }, function errorCallback(response) {

    });
};

$scope.data = [];
$scope.comment = [];
$scope.btn_add = function (newsItem) {
    if ($scope.txtcomment != '') {
        $scope.data.push({
            "comment": $scope.txtcomment,
            "guid": newsItem.guid
        });
        $http.post('/comments/new', {
            "comment": $scope.txtcomment,
            "guid": newsItem.guid
        }).then(function successCallback() {

            var encodedURI = encodeURIComponent(newsItem.guid);

            $http({
                method: 'GET',
                url: '/articles/' + encodedURI + '/comments'
            }).then(function successCallback(response) {

                $scope.comments = response.data;

                $scope.txtcomment = "";

            }, function errorCallback(response) {

            });
        }, function errorCallback() {

            console.log('Error comment!');
        });

    }
};

$scope.savearticle = function (newsItem) {
    $http.post('/saved-articles/save', newsItem).then(function successCallback(response) {
        /*console.log(document.getElementById("save/"+newsItem.guid).className="disabled");*/
    }, function errorCallback(response) {

    });
}

/**
 * The saved articles by the user will be retrieved when a button clicked
 */

$scope.getSavedArticles = function () {

    /*AJAX request: retreive the saved the saved articles for the user*/

    $http({
        method: 'GET',
        url: '/saved-articles'
    }).then(function successCallback(response) {

        $scope.linkData = null;

        $scope.newsItems = response.data;


    }, function errorCallback(response) {

    });
};
}]);

需要帮助!

2 个答案:

答案 0 :(得分:1)

哟不需要在每个控制器文件中声明模块。删除每个控制器中的行

 var app = angular.module('app');

答案 1 :(得分:0)

您正在模块中注入控制器,例如依赖项。

将main.js文件更改为:

var app = angular.module('app', ['ngRoute','thatisuday.dropzone']);

@Sajeetharan是对的,你不需要在所有控制器中声明模块声明。

因为你根据你的评论使用了laravel。 (它会与您的刀片模板冲突,因为它们对变量使用相同的{{}})

有两种方法可以做到这一点:

更改角度标记

var app = angular.module('app', [], function($interpolateProvider) {
        $interpolateProvider.startSymbol('<%');
        $interpolateProvider.endSymbol('%>');
    });
  

现在Laravel将使用{{variableName}},而Angular将使用&lt;%   variableName%&gt;。

更改Laravel Blade标记

 Blade::setContentTags('<%', '%>');// for variables and all things Blade
 Blade::setEscapedContentTags('<%%', '%%>');// for escaped data
  

变量将是:&lt;%$ variable%&gt;。评论将是:&lt;% - $ variable    - %取代。转义后的数据如下所示:&lt; %% $ variable %%&gt;。

您可以查看此Tutorial了解详情。