AngularJs:访问父范围,我得到范围未定义

时间:2016-11-04 13:18:11

标签: javascript angularjs angular-material

我正在尝试访问父作用域,但是我收到了未定义作用域的错误。

MyApp.controller('AdminController', function ($scope, $http, $filter, $mdDialog, $window, $location, $mdToast) {

$scope.test = "Test";

}).
controller('ToastCtrl', function($scope, $mdToast, $mdDialog) {
    $scope.openMoreInfo = function(e) {
        if ( isDlgOpen ) return;
        isDlgOpen = true;

        $mdDialog
          .show($mdDialog
            .alert()
            .title($scope.$parent.test)
            .targetEvent(e)
          )
          .then(function() {
              isDlgOpen = false;
          })
    };
}); 

任何建议,为什么我收到此错误。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

你应该在这里(至少)发布你的观点,但我假设在你的HTML中你有这样的东西

<div ng-controller="AdminController">
    <div ng-controller="ToastCtrl">
        <!-- openMoreInfo  called somewhere here -->
    </div>
</div>

您的控制器在父作用域中查找$scope.test变量。您可以尝试以这种方式使用angularjs scope inheritance

在父控制器中使用

更改$scope.test = "Test";
$scope.Data = {};
$scope.Data.test = "Test";

然后在您的孩子控制器中使用.title($scope.Data.test) 子控制器将尝试访问$scope.Data对象,但它在当前范围内不存在,因此它将尝试在可以找到它的$parent范围内搜索它。

答案 1 :(得分:1)

您无法访问该值的问题是parent-child之间没有relationship controllers

您可以通过多种方式访问​​它:

  1. 使用service在控制器之间进行通信。
  2. 使用emit / broadcast进行通信
  3. 使用$rootscope,但不建议这样做。