【问题标题】:Accessing parent controller $scope data after load in angular在角度加载后访问父控制器 $scope 数据
【发布时间】:2016-06-08 21:10:13
【问题描述】:

我在angular有以下情况:

  1. 我在 init() 上将 json 数据从数据库加载到变量“data”,并希望在子控制器(嵌套)中使用变量“data”。
  2. 由于从数据库加载需要一些时间,子控制器中的变量 $scope.data 输出为“未定义”。

处理这种情况的优雅方法是什么?我是否需要在子控制器内对父级的 init 方法使用承诺?我会很感激一个例子:)。

// Parent Controller
app.controller('pCTRL', function($scope) {
  $scope.init = function(id){} 
  //sets my variable $scope.data successfully via a rest API
  //and for test, sets $scope.x to "blabla"
}

//Child Controller
app.controller('cCTRL', function($scope) {
console.log($scope.x); //outputs blabla properly
console.log($scope.data); // undefined

感谢您的反馈!

【问题讨论】:

  • 根据您的用例,有很多方法可以处理这个问题。您是想在子控制器中转换初始化时的父数据,还是只是想在子模板中显示它?
  • 感谢您的回复。事实上,子控制器是 1) 显示数据和 2) 转换它(附加新对象)。
  • 我在这里找到了一个关于设计这种数据交换的对话:stackoverflow.com/questions/15012385/…

标签: angularjs angular-promise angular-controller


【解决方案1】:

一个常见的解决方案是使用观察者。例如:

app.controller('cCTRL', function($scope) {
    $scope.$watch('data', function(newVal){
        console.log(newVal); // outputs actual value
    });
}

仅当您需要在指令中包含逻辑时才需要这样做。如果您只想在cCTRL 模板中显示data,则不需要上面的watcher,angular 会在父级更改时更新模板。

【讨论】:

    猜你喜欢
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2013-07-22
    相关资源
    最近更新 更多