首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从状态解析函数访问返回的数据

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

Stack Overflow用户
提问于 2017-07-06 10:04:20
回答 2查看 41关注 0票数 1

我使用AngularJS模块ui-router,并使用resolve属性获取项的id。

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

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

代码语言:javascript
复制
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
                })
            }
        }
    })

}]);
代码语言:javascript
复制
angular.module('myApp').component('patent', {
    bindings: { 
        patent: '=' ,
    },
    templateUrl: '../templates/patents/list/patent-item.htm',
    controller: function() {
        var vm = this;

        //WHERE I NEED TO ACCESS THE RETURNED VALUE

    }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-06 11:10:34

要访问已解析的数据,只需将它们定义为绑定到控制器。就像你已经对patent做过的那样。然后通过您的vm变量(或此)访问它们。

代码语言:javascript
复制
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);
            }
        }
    }
});

正如@rrd建议的那样,您应该保护您的控制器不受小型化的影响,但不仅如此,您还应该保护您的解决函数不受小型化的影响。

就像这样:

代码语言:javascript
复制
resolve: {
    patents: ['patentsService', function(patentsService) {
        return patentsService.fetchAllPatents();
    }],
    graphs: ['patentsService', function(patentsService) {
        return  patentsService.fetchGraphData();
    }]
} 
票数 1
EN

Stack Overflow用户

发布于 2017-07-06 10:13:28

正如Vivz所指出的,注入控制器应该有效,但您需要确保避免出现小型化问题:

代码语言:javascript
复制
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

  }]
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44945835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档