当前位置: 首页 > 知识库问答 >
问题:

$父级不在ng中工作-包括角[重复]

郭凡
2023-03-14

我正在使用$scope.$parent更改子控制器中变量的值,但更改并没有反映到其父控制器中。

<div data-ng-if="!addBillDetails">
    <button class="btn btn-small" data-ng-if="trItem.skuId==217"
            data-ng-click="addDetails()">Add Details</button>
</div>
<div data-ng-if="addBillDetails" data-ng-include="'views/test.html'"></div>
$scope.addDetails=function(){
                $scope.addBillDetails=true;
};

html和testCrl

<div data-ng-controller="testCtrl">
<button type="button" class="btn red" data-ng-click="cancel()">Cancel</button>
    </form>
</div>
$scope.cancel=function(){
   alert("cancel");
  $scope.$parent.addBillDetails=false;
};

共有1个答案

殳宸
2023-03-14

发生这种情况是因为ng-include/ng-if创建了一个原型继承的子作用域。

让我们从为什么$parent技巧对您不起作用开始,基本上AddBillDetails变量没有在TestCtrl的直接$parent范围内分配。因为views/test.html模板是根据ng-if&ng-include指令组合呈现的。它创建了不同的作用域层次结构,参见下图。

//ng-controller="parentCtrl" `$scope.addBillDetails`
|
|
ng-if
   |
   |- ng-inlcude
      |
      |- ng-controller="testCtrl" ($scope.$parent.$parent.$parent.addBillDetails)

通过查看上图,如果要修改父级TestCtrlAddBillDetails,则必须使用$scope.$parent.$parent.AddBillDetails以获得正确的值。在这里查看演示。不要在代码中使用$parent,这会使代码与html设计和假设紧密结合。

在这种情况下,首选使用对象(引用类型变量),或者在使用控制器(controllerAs版本)时使用controllerAs模式。

推荐阅读“AngularJS中作用域原型/原型继承的细微差别是什么?”

HTML

{{model.addBillDetails}}
  <div data-ng-if="!model.addBillDetails">
    <button class="btn btn-small" data-ng-if="trItem.skuId==217" data-ng-click="addDetails()">Add Details</button>
  </div>
  <div data-ng-if="model.addBillDetails" data-ng-include="'views/test.html'"></div>
.controller('parentCtrl', function($scope) {
    $scope.model = {};
    $scope.model.addBillDetails = true;
    $scope.addDetails = function() {
      $scope.model.addBillDetails = true;
    };
})
.controller('testCtrl', function($scope) {
    $scope.cancel = function() {
      alert("cancel");
      $scope.model.addBillDetails = false;
    };
})
 类似资料:
  • 这里的结果是错误的,我不确定为什么。请帮忙

  • 问题内容: 我有一个视图,其中父div上具有ng-if,而某些子元素上具有ng-show。嵌套在带有ng-if的元素下时,ng- show似乎无法正常工作。这是Angular错误还是我做错了什么? 见这个矮子。 HTML: JavaScript: 谢谢, 安迪 问题答案: 与指令不同,它 创建了一个新的作用域* 。 * 因此,当您在内部编写内容时,您是在子范围而非主范围上设置属性。 要解决此问题,

  • 我用的是Stackblitz:https://stackblitz.com/edit/bible-talk 我用的是角度10。 我正在尝试从JSON文件导入数据。 我在Stackblitz上找到了一个如何做到这一点的例子: https://stackblitz.com/edit/json-import-example?file=src/app/app.component.html 您应该将这些添加

  • 我有这样一个数据库模型: 所以我们有一个客户可以做一个订单。这个订单包括一个产品,这个订单包括一个名称。我现在尝试用如下所示的linq语句返回完整的模型: 但是不起作用,因为Orders是一个ICollection。来自德国的问候,并提前感谢任何帮助。

  • 问题内容: 我在PhoneGap中遇到ngView的问题。 一切似乎都可以正常加载,我什至可以使用ng-controller使基本控制器正常工作。但是,当我尝试在ngView中使用路由时,什么也没发生。 index.html app.js 每次单击链接时,Eclipse记录器都会显示该链接,而在没有链接的情况下尝试该链接会引发一个错误,即找不到该路径。 从我在其他任何地方已经做好的准备,这应该可以

  • 我定义了一个自定义过滤器,如下所示: 正如您所看到的,使用过滤器的ng repeat嵌套在另一个ng repeat中 过滤器的定义如下: 我得到: 错误:中继器中不允许重复。复读机:评论在item.comments|范围:1:2ngRepeatAction@https://ajax.googleapis.com/ajax/libs/angularjs/1.1.4/an