我正在使用$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;
};
发生这种情况是因为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)
通过查看上图,如果要修改父级TestCtrl
的AddBillDetails
,则必须使用$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