将 parent 指令变量传递给 angular 中的 child 指令
communicating parent directive variable to child directive in angular
我正在尝试基于嵌入到 div 中的元素构建一个简单的 show/hide 指令。我有一个 parent 和一个 child 指令。单击 parent 指令时,child 指令应将 show/hide 切换为 div。切换函数位于 parent 控制器中并在 true 和 false 之间切换变量,以便 child 指令可以 show/hide.
问题:parent 指令中的切换功能正常工作,但是 child 指令在单击 parent 时不知道切换变量的变化。我使用 require 将 ctrl 传递给 child 指令中的 link 函数。这样我就可以访问 parent 控制器 objects 来显示和隐藏。 toggle 变量在 child 可见,但不反映页面初始加载后的任何更改。单击时,不显示或隐藏任何内容。
代码:
angular.module('demo', [])
.directive('demoParent', function() {
return {
restrict: 'E',
scope: {},
transclude: true,
template: '<div ng-click="toggleTarget()" ng-transclude></div>',
controller: function($scope) {
$scope.toggleTarget = function() {
this.openTarget = !this.openTarget;
};
this.openTarget = false;
}
};
})
.directive('demoChild', function() {
return {
require: '^demoParent',
restrict: 'E',
transclude: true,
link: function(scope, elem, attrs, ctrl) {
scope.ctrl = ctrl;
},
template: '<div ng-show="ctrl.openTarget" ng-transclude></div>',
};
});
child 是否需要向 parent ctrl 添加观察者,或者这是一旦从 parent 传递到 child 的孤立变量的情况?
试试这个:
变种我=这个;
$scope.toggleTarget = 函数() {
me.openTarget = !me.openTarget;
};
我已经对您的工作场景进行了 Fiddle,您的 this
功能也有问题,除了您说的 ^demoChild
是错字。一旦进入您的函数,this
指向范围,而不是您预期的控制器,因此应修改此部分:
controller: function($scope) {
this.openTarget = false;
var _ctrl = this;
$scope.toggleTarget = function() {
_ctrl.openTarget = !_ctrl.openTarget;
};
}
我正在尝试基于嵌入到 div 中的元素构建一个简单的 show/hide 指令。我有一个 parent 和一个 child 指令。单击 parent 指令时,child 指令应将 show/hide 切换为 div。切换函数位于 parent 控制器中并在 true 和 false 之间切换变量,以便 child 指令可以 show/hide.
问题:parent 指令中的切换功能正常工作,但是 child 指令在单击 parent 时不知道切换变量的变化。我使用 require 将 ctrl 传递给 child 指令中的 link 函数。这样我就可以访问 parent 控制器 objects 来显示和隐藏。 toggle 变量在 child 可见,但不反映页面初始加载后的任何更改。单击时,不显示或隐藏任何内容。
代码:
angular.module('demo', [])
.directive('demoParent', function() {
return {
restrict: 'E',
scope: {},
transclude: true,
template: '<div ng-click="toggleTarget()" ng-transclude></div>',
controller: function($scope) {
$scope.toggleTarget = function() {
this.openTarget = !this.openTarget;
};
this.openTarget = false;
}
};
})
.directive('demoChild', function() {
return {
require: '^demoParent',
restrict: 'E',
transclude: true,
link: function(scope, elem, attrs, ctrl) {
scope.ctrl = ctrl;
},
template: '<div ng-show="ctrl.openTarget" ng-transclude></div>',
};
});
child 是否需要向 parent ctrl 添加观察者,或者这是一旦从 parent 传递到 child 的孤立变量的情况?
试试这个: 变种我=这个; $scope.toggleTarget = 函数() { me.openTarget = !me.openTarget; };
我已经对您的工作场景进行了 Fiddle,您的 this
功能也有问题,除了您说的 ^demoChild
是错字。一旦进入您的函数,this
指向范围,而不是您预期的控制器,因此应修改此部分:
controller: function($scope) {
this.openTarget = false;
var _ctrl = this;
$scope.toggleTarget = function() {
_ctrl.openTarget = !_ctrl.openTarget;
};
}