$parent在ng-include中不起作用,angular。
$parent在ng-include中不起作用,angular。
这个问题已经有答案了:
我使用$scope.$parent
修改子控制器中的变量值,但父级没有反映出变化。
$scope.addDetails=function(){ $scope.addBillDetails=true; };
test.html和testCrl
$scope.cancel=function(){ alert("cancel"); $scope.$parent.addBillDetails=false; };
admin 更改状态以发布 2023年5月23日
这是因为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.$parent.addBillDetails
来获取正确 的值。在这里查看演示。永远不要在您的代码中使用$parent
,这会让您的代码紧密地耦合在html设计和假设上。
在这种情况下,首选使用对象(引用类型变量)或使用controllerAs
模式来使用控制器 (controllerAs版本)。
建议阅读“AngularJS中作用域原型/原型继承的细微差别是什么?”
Html
{{model.addBillDetails}}
Code
.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; }; })