AngularJS:如何从子指令访问父控制器的作用域项
AngularJS : How do access parent controller's scope item from the child directive?
我的html视图如下
学校.html
<html>
<body>
<div class="col-xs-9">
<!-- major bootstrap html code goes over here -->
</div>
<div class="col-xs-3">
<!--Call to directive goes here-->
<div student-profile ngInit="studentId=profileId"></div>
</div>
</body>
</html>
控制器:学校控制器.js
(function() {
var app = angular.module("SchoolApp")
var SchoolController = function ($scope,$rootScope,...)
{
$scope.profileId = myData.profileId;
}
学生档案控制器.js
(function() {
var app = angular
.module("SchoolApp")
.directive('studentProfile',studentProfileDirective)
function studentProfileDirective(){
return {
restrict :'AE',
replace:'true',
controller:studentProfileController,
bindtocontroller:true,
template:'student-profile.html'
}
studentProfileController.inject=['$scope','$rootScope',...];
function studentProfileController($scope,$rootScope,....)
{
var ProfileID = $scope.$parent.profileId;
console.log("ProfileID",ProfileID);
}
};
我已经尝试了$scope.$parent.profileId,但它不起作用。我得到的配置文件ID为"未定义"。如何在子指令中获取父控制器的范围项配置文件 ID?
它看起来像我的身体控制器在我的指令加载后分配配置文件 ID。因此,当第一次加载我的指令时,它不会从其父范围获取任何 profileId。在这种情况下,如何进行后续同步?
将车身控制器移动到body
标签。
<html>
<body ng-app="SchoolApp" ng-controller="SchoolController">
<div class="col-xs-9">
<!-- major bootstrap html code goes over here -->
</div>
<div class="col-xs-3">
<!--Call to directive goes here-->
<div student-profile ngInit="studentId=profileId"></div>
</div>
</body>
</html>
并且一定要声明它。
(function() {
var app = angular.module("SchoolApp")
//Be sure to declare it
app.controller("SchoolController", SchoolController);
//
var SchoolController = function ($scope,$rootScope,...)
{
$scope.profileId = myData.profileId;
}
通过将 ng-controller
指令放在body
层次结构的顶部,$compile
服务将首先实例化它,然后再编译其他指令。
生成自定义指令时,可以控制它是共享父作用域还是创建子作用域。默认情况下,它共享父视图的范围。如果在指令对象上设置scope: true
,它将使用原型继承自父视图范围的子作用域。如果在指令对象上设置scope: {}
,则会创建一个隔离范围,不继承父视图范围中的任何内容。
因此,要根据指令的声明方式回答您的问题,您可以使用 $scope 变量本身访问父范围,因为它是共享的。
https://github.com/angular/angular.js/wiki/Understanding-Scopes#directives
相关文章:
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 从指令链接函数监视控制器作用域
- 控制器作用域变量在刷新之前未加载
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- ng-click 指令不调用控制器作用域中定义的函数
- 如何从2级指令访问控制器作用域
- 角度指令控制器作用域继承
- 触发指令AngularJs的控制器作用域
- Angularjs-在路由更改时刷新控制器作用域
- 访问父指令's子指令中的控制器作用域变量
- 将Angular Service对象绑定到控制器作用域并更新
- UI引导日期选择器不调用内联控制器作用域上的函数
- 将变量从控制器作用域传递到指令
- 工厂中与控制器作用域绑定的已修改数据不会更新
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 如何在angular 1.4.5+中操纵指令中的控制器作用域
- AngularJS:在两个具有隔离作用域的指令之间共享一个控制器作用域
- 如何将控制器作用域变量传递给angular.元素在头部元素中追加子元素时
- AngularJS+Jasmine -在指令中写入一个控制器作用域
- 如何从嵌入式D3脚本中访问Angular控制器作用域