目标ng-如果外部控制器

时间:2016-01-23 08:22:35

标签: angularjs

我的应用有反馈功能,

#feedback
  %h3.button
    %a{"ui-sref" => ".feedback", "ng-click" => "feedbackActive=!feedbackActive;"}
      Feedback
  #feedback-container{"ng-if" => "feedbackActive"}
    %div{"ui-view" => "feedback"}

#feedback-container有一个ng-if,因此只在需要时加载内容。 %a有一个ng-click,可以在feedbackActive状态的true / false之间切换。

这很好用。无论如何在我的ui-view中我加载了一个模板。该模板中有一个发送按钮,其send()功能与feedbackCtrl

相关联
$scope.send = function(){
  console.log ('send')
  console.log ($scope.feedbackForm)

  createFeedback.create({
    name:      $scope.feedbackForm.name,
    feedback:  $scope.feedbackForm.feedback
  })
  $scope.feedbackActive = false;
}

它运行代码很好,但没有给feedbackActive假值,所以没有任何反应。

如何删除从控制器外部切换ng-if

1 个答案:

答案 0 :(得分:1)

这是一个经典的范围界定问题。您的控制器范围是ng-if指令范围的子级。一种选择是使用$scope.$parent在父作用域上设置变量。

$scope.send = function(){
  console.log ('send')
  console.log ($scope.feedbackForm)

  createFeedback.create({
    name:      $scope.feedbackForm.name,
    feedback:  $scope.feedbackForm.feedback
  })
  $scope.$parent.feedbackActive = false;
}

另一种选择是利用原型继承。在父控制器中,初始化对象。

$scope.x = {}; //parent scope

在视图控制器中,设置继承对象的属性。

$scope.x.feedbackActive = false; //child scope

当然还有HTML

<feedback-container ng-if="x.feedbackActive">