AngularJS - 访问范围内的元素

时间:2014-05-05 10:31:48

标签: json angularjs scope share

我已经完成了一项服务,该服务从服务器获取一个json文件,其中包含我的webapp标签的翻译值。似乎工作正常:

mobilityApp.service('serveiTraduccions', function($resource) {

    this.getTranslation = function($scope) {
        var languageFilePath = 'traduccions/traduccio_en.json';
        $resource(languageFilePath).get(function (data) {                        
            $scope.translation = data;
        });
    };

});

我想要做的是访问" $ scope.translation"从我的控制器,我尝试了所有,没有任何工作。如您所见,对象保存在我的$ scope中:

enter image description here

如何获取" registroBtnRegistro"," registroErrorRegistro"的值?等?

提前致谢!

我试过了:

  • console.log($scope.translation); - >未定义
  • console.log($scope['translation']); - >未定义
  • console.log($scope.translation.registroBtnRegistro); - >类型错误: 无法阅读财产&reganstroBtnRegistro'未定义的 的console.log($ scope.translation [' registroBtnRegistro']); - >类型错误: 无法阅读财产&reganstroBtnRegistro'未定义的

2 个答案:

答案 0 :(得分:1)

也许您正在尝试从另一个$ scope中访问这些值,这些值不会继承您创建翻译模型的范围。

尝试将此模型直接分配给$ rootScope,以便您可以从每个范围访问它:

mobilityApp.service('serveiTraduccions', function($resource, $rootScope) {

    this.getTranslation = function() {
        var languageFilePath = 'traduccions/traduccio_en.json';
        $resource(languageFilePath).get(function (data) {                        
            $rootScope.translation = data;
        });
    };

});

答案 1 :(得分:0)

这个答案是盲目的尝试,因为你的原始帖子缺少基本信息,如来自控制器的呼叫。 我们可以对它进行改进,直到我们开始工作。

首先,你应该从你的方法中返回一些东西:

mobilityApp.service('serveiTraduccions', function($resource) {
  this.getTranslation = function() {
    var languageFilePath = 'traduccions/traduccio_en.json';
    return $resource(languageFilePath);
  };
});

您使用的是$resource,但您也可以使用基本的$http.get()。至少它看起来不像是一个宁静的api。 在任何情况下,因为它是异步请求,它不会返回已翻译字符串列表,而是返回允许getdelete或更一般query()等方法的资源“类” :

  

来自docs:默认方法是       {'get':{方法:'GET'},       'save':{方法:'POST'},       'query':{method:'GET',isArray:true},       'remove':{method:'DELETE'},       '删除':{方法:'删除'}};

旁注:在服务中注入$scope对我来说没有多大意义:服务用于封装组件中的通用逻辑。但是,您可以将范围实例作为参数传递。

然后,使用它的控制器应该注入服务并使用回调来获取结果(异步操作!):<​​/ p>

TraduccioCtrl ... {
     $scope.translation = {}; // avoid undefined when the view just loads

     ServeiTraduccions.getTranslation.query(function (response) { 
        $scope.translation = response; // and angular's two-way data binding will probably do the rest
     });

}

Angular docs about ng-resource有一个有效的例子。 SO中的其他问题也已经解决了这个问题,例如Using AngularJS $resource to get data