Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 从状态解析函数访问返回的数据_Javascript_Angularjs_Chart.js - Fatal编程技术网

Javascript 从状态解析函数访问返回的数据

Javascript 从状态解析函数访问返回的数据,javascript,angularjs,chart.js,Javascript,Angularjs,Chart.js,我正在使用AngularJS模块ui路由器,并使用resolve属性获取项目的id 在一个单独的文件中,我有一个组件,patient,用于状态patients.patient,它具有返回id的功能。我需要从控制器访问返回的id,以便收集与所选项目相关的正确数据 如何访问控制器返回的resolve函数值 var app = angular.module('myApp', ['ui.router', 'chart.js']); app.config(['$stateProvider', funct

我正在使用AngularJS模块
ui路由器
,并使用
resolve
属性获取项目的id

在一个单独的文件中,我有一个组件,
patient
,用于状态
patients.patient
,它具有返回
id
的功能。我需要从控制器访问返回的
id
,以便收集与所选项目相关的正确数据

如何访问控制器返回的
resolve
函数值

var app = angular.module('myApp', ['ui.router', 'chart.js']);

app.config(['$stateProvider', function($stateProvider) {

    $stateProvider
    .state('patents', {
        url: '/patents',
        component: 'patents',
        resolve: {
            patents: function(patentsService) {
                return patentsService.fetchAllPatents();
            },
            graphs: function(patentsService) {
                return  patentsService.fetchGraphData();
            }

        }      
    })
    .state('patents.patent', {
        url: '/{patentId}',
        component: 'patent',
        resolve: {
            patent: function(patents, $stateParams) {
                return patents.find(function(patent){ 
                    return patent.id == $stateParams.patentId;
                })
            },
            graph: function(graphs, $stateParams) {
                return graphs.dataset.find(function(graph){
                    return graph.id == $stateParams.patentId; //NEED THIS VALUE
                })
            }
        }
    })

}]);


正如Vivz指出的,注入控制器应该可以工作,但您需要确保防止缩小问题:

angular.module('myApp').component('patent', {
  bindings: { 
    patent: '=' ,
  },
  templateUrl: '../templates/patents/list/patent-item.htm',
  controller: ['graph', function(graph) {
    var vm = this;

    //WHERE I NEED TO ACCESS THE RETURNED VALUE

  }]
});

要访问解析的数据,只需将它们定义为控制器的绑定。就像你已经完成了
专利
。然后通过
vm
变量(或此变量)访问它们


您可以将解析注入控制器函数,如controller:function(专利、图形)这正是我所想的,但它出现了错误
error:$injector:unpr Unknown Provider
您可以使用指令而不是组件,结构看起来是一样的,但是Idk其他开发人员建议您尝试使用组件实现什么,并且根据Angular的文档,您可以使用一个路由控制器,它将充当resolve和组件之间的粘合剂。它的工作是在作用域中注入所有“解析”和它们,以便模板可以访问它们。更多参考信息,我了解安全防范最小化问题,但仍然存在错误
错误:$injector:unprUnknown Provider
shows:/非常感谢您的详细解释和示例,但是第一种方法返回undefined,第二种方法返回与上述相同的错误消息。我一直在读Vivz发布的内容。似乎正在取得进展,但正在返回错误请尝试在resolve函数中添加
console.log()
,以检查它们是否实际返回任何值,或者是否调用了它们。问题似乎不是控制器本身。是的,我做到了。返回专利和图形解析的正确数据。到目前为止,您共享的代码中似乎没有任何错误,因此可能错误源于其他地方。你能分享你问题中的全部错误信息吗?@Nikolajdallarsen非常感谢你!!!像一个骑兵一样工作。再次感谢!
angular.module('myApp').component('patent', {
  bindings: { 
    patent: '=' ,
  },
  templateUrl: '../templates/patents/list/patent-item.htm',
  controller: ['graph', function(graph) {
    var vm = this;

    //WHERE I NEED TO ACCESS THE RETURNED VALUE

  }]
});
angular.module('myApp').component('patent', {
    bindings: { 
        patent: '<' ,
        graph: '<'
    },
    templateUrl: '../templates/patents/list/patent-item.htm',
    controller: function() {
        var vm = this;

        vm.$onChanges = function(changeObj){
            if(changeObj.patent){
                console.log('I am your patent', vm.patent);
            }
            if(changeObj.patent){
                console.log('I am your graph', vm.graph);
            }
        }
    }
});
resolve: {
    patents: ['patentsService', function(patentsService) {
        return patentsService.fetchAllPatents();
    }],
    graphs: ['patentsService', function(patentsService) {
        return  patentsService.fetchGraphData();
    }]
}