【问题标题】:How to access a object value of another angular component如何访问另一个角​​度组件的对象值
【发布时间】:2017-06-15 14:39:50
【问题描述】:

很遗憾,我无法在组件之间传递数据。 我参加了 bcqr-reader 演示 https://embed.plnkr.co/m9dtF9llcAw7eYE94b5k/preview 并将扫描的信息传递给我的第二个组件。 首先你可以看到我的扫描组件。 “$scope.url”是我感兴趣的对象。

angular.module('foo').component('scan', {
  bindings:{url:"="},
  templateUrl:  'templates/scan.html',
  controller:function($scope){

      $scope.start = function() {
      $scope.cameraRequested = true;
  }

  $scope.processURLfromQR = function (url) {
    $scope.url = url;
    $scope.cameraRequested = false;
  }

  }

});

我的第二个组件“show”是“$scope.url”的目的地。 稍后我将需要 $scope.url 将其用作 couchdb 查询的 id。 我读了很多,关于组件之间的数据交换,但我没有让我运行。我还尝试将对象存储为 $rootScope。我更喜欢像 $onChanges 这样的基于事件的解决方案,但现在欢迎所有帮助。

angular.module('foo').component('show', {
template:  '<p> Transfered value: {{$ctrl.url}}</p>',
bindings:{url:"="},
require: { url:'^scan'
},
controller: function () {
this.$onInit = function () {
console.log(this.foo.url); // 
  }; }

});

我的 app.js 文件如下所示:

myApp.config(function($stateProvider,$urlRouterProvider) {
var scanState = {
name: 'scan',
url: '/scan',
component:'scan'
}

var showState = {
name:'show',
url: '/show',
component:'show'
}

$stateProvider.state(scanState);
$stateProvider.state(showState);

$urlRouterProvider.otherwise("scan");
});

【问题讨论】:

    标签: angularjs angular-ui-router angular-components


    【解决方案1】:

    要在组件之间共享内容,您可以使用服务来解决。服务是单例类,您在其中存储的内容在整个应用程序中都可用。单例类要记住的一点是,存储的数据不是持久的,一旦应用程序终止就会被清除。

    app.service('service-name', function(){
    
       var myVar = undefined;
    
       var service-name = {
           setVar: function(_value){
                myVar = _value;
           },
           getVar: function(){
                return myVar;
           }
       };       
    
       return service-name;
    });
    

    要使用控制器中的服务,只需在控制器的依赖项中声明它并像这样使用:

    表单控制器 A:

    var myValue = something;

    服务名称.setVar(myValue);

    来自控制器 B:

    var myVar = service-name.getVar();

    【讨论】:

    • 好的,感谢您的快速回复。你的提示是用一个论点来扩展我的状态定义。在您的情况下使用“解决”。
    • 欢迎您! ...“访问另一个角​​度组件的对象值”..他们最好的方法是将对象存储在角度服务中
    • 让我为您准备通过服务共享数据所需的代码
    • 首先感谢它运行。我之前知道的所有示例都使用带有“http.get”的角度服务来读取 json.files。很高兴知道我也可以与角度服务共享对象等临时信息。此外,我是一个初学者,我又学到了很多东西。
    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2019-10-27
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多