Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs使用工厂和;routeParams:如何编写detailcontroller_Javascript_Angularjs - Fatal编程技术网

Javascript angularjs使用工厂和;routeParams:如何编写detailcontroller

Javascript angularjs使用工厂和;routeParams:如何编写detailcontroller,javascript,angularjs,Javascript,Angularjs,首先,我是stackoverflow&angularjs的新手,所以如果我的问题很糟糕,请原谅我 对于一个简单的新闻应用程序,我正在用angularjs创建一个主-细节视图,问题是:我无法让细节视图工作,主视图工作正常,链接正确,但是我无法在细节视图中获得json。我不知道应该如何在细节控制器内设置routeParams&factory injection。以下是我所拥有的: index.html <!doctype html> <html lang="en" ng-a

首先,我是stackoverflow&angularjs的新手,所以如果我的问题很糟糕,请原谅我

对于一个简单的新闻应用程序,我正在用angularjs创建一个主-细节视图,问题是:我无法让细节视图工作,主视图工作正常,链接正确,但是我无法在细节视图中获得json。我不知道应该如何在细节控制器内设置routeParams&factory injection。以下是我所拥有的:

index.html

    <!doctype html>
<html lang="en" ng-app="test">
<head>
    <meta charset="UTF-8">
    <title>angular master-detail live-data test</title>

</head>
    <body>
        <div class="main"> 

            <div ng-view></div>

        </div> <!--/main-->

        <script src="angular/angular.js"></script>
        <script src="angular/angular-route.js"></script>

        <script src="script/app.js"></script>
        <script src="script/controllers/newsController.js"></script>
        <script src="script/services/newsFactory.js"></script>
        <script src="script/constants.js"></script>

    </body>
</html>
最后是控制器

 // newsController.js << MASTER
(function () {
    'use strict';


    angular.module('test')
        .controller('newsController', newsController);

    newsController.$inject = ['newsFactory'];
    function newsController(newsFactory) {
        var vm = this;                                  

        newsFactory.getItems()          
            .success(function (items) {
                vm.items = items;
                })
                .error(function (err) {
                    alert('something went wrong!')
                });
    }
})();

// newsController.js << DETAIL
(function () {
    'use strict';

    angular.module('test')
        .controller('newsItemController', newsItemController);

    newsItemController.$inject = ['$routeParams', 'newsFactory'];

    function newsItemController($routeParams, newsFactory) {
        var vm = this,
            id = $routeParams.id;
        vm.item = newsFactory.getItem = function (id) {
            return items[id -1];
        }

    }
})();
常数.js

(function () {
    'use strict';

    angular.module('test')
        .constant('GLOBALS', {
                newsUrl: 'data/news.json'
            });
})();

我想你需要用$routeProvider服务配置你的angular模块。我猜你已经在app.js中注册了你的模块,这里没有提供

在这个js文件中,你可以放一些东西

angular.module('test',[ngRoute])
.config(['$routeProvider'function($routeProvider){

           when('/main', {
                    templateUrl: 'main.html',
                    controller: 'newsController'
              }).
           when('/details', {
                    templateUrl: 'details.html',
                    controller: 'newsItemController'
              }).
otherwise({
                    redirectTo: '/main'
                });

}]);

在您的
newsItemController
中,您正在
新闻工厂上创建一个新函数。这显然是错误的,因为您还访问了
项目
,而该项目在
新闻项目控制器
中不存在

您的工厂应该是唯一存放
项目的地方,并且您提供了访问这些项目的方法:

(function () {
    'use strict';

    angular.module('test').factory('newsFactory', newsFactory);

    newsFactory.$inject = ['$http', 'GLOBALS'];

    function newsFactory($http, GLOBALS) {
        var newsItems = [];
        return {
            getItems: function () {
                return $http({
                    method: 'GET',
                    url: GLOBALS.newsUrl
                }).success(function (items) {
                    newsItems = items;
                    return newsItems;
                }); 
            },
            getItem: function (id) {
                return newsItems[id];
            }
        };
    }   
})();
您仍然可以在
newsController
中执行相同的操作,但在
newsItemController
中,您可以调用:

vm.item = newsFactory.getItem(id);
更新:完整的
NewsItemController

(function () {
    'use strict';

    angular.module('test')
        .controller('newsItemController', newsItemController);

    newsItemController.$inject = ['$routeParams', 'newsFactory'];

    function newsItemController($routeParams, newsFactory) {
        var vm = this;
        var id = $routeParams.id;
        vm.item = newsFactory.getItem(id);
    }
})();

可能的问题:
newsItemController.js
未包含在HTML中。它位于同一个文件newsController.js中(代码中的注释确实令人困惑,刚刚更正,谢谢注意)是否可以发布它的外观?当然可以。请稍等。是的,对不起,在这里,我打电话给控制器的部分如下:我会立即用app.js更新或原始帖子我犯的错误显然在newsItemcontroller中确实,这是有道理的,可以在帖子中显示newsItemcontroller的总体外观吗?这将是非常非常有用的,然后我可以学习一个工作的基本设置。我最后一次问你,谢谢!!!我已经在答案中添加了控制器。谢谢,它确实给了我1。未捕获的语法错误:意外标记=2。错误:[$injector:unpr]未知提供程序:newsFactoryProvider为1。发生了什么?我没有测试就写了它,因为我这里没有运行angular应用程序。
vm.item = newsFactory.getItem(id);
(function () {
    'use strict';

    angular.module('test')
        .controller('newsItemController', newsItemController);

    newsItemController.$inject = ['$routeParams', 'newsFactory'];

    function newsItemController($routeParams, newsFactory) {
        var vm = this;
        var id = $routeParams.id;
        vm.item = newsFactory.getItem(id);
    }
})();