从组件中要求指令控制器返回一个空控制器
Requiring directive's controller from component return an empty controller
所以在过去的4个小时里,我一直在努力弄清楚这一点。基本上我有一个父指令,这是动态编译成DOM在它里面,我有一个组件它正在被跨包
$compile('<edit-modal entry="entry" positions="positions" day="day" is-filled="isFilled" week-start-date="weekStartDate" available-tags="availableTags" minigrids="minigrids">' +
'<ns-gap-requests gap="entry" minigrids="minigrids"></ns-gap-requests></edit-modal>')(scope);
下面是editModal html中渲染的组件:
<div id="gapRequestsBody" ng-if="onGapRequest" ng-transclude></div>
下面是父指令
return {
restrict: 'E',
replace: 'true',
transclude:"true",
templateUrl: 'Scripts/NewScheduler/Templates/Modals/editModal.html',
scope: {
positions: '<',
entry: '=',
day: '<',
weekStartDate: '<',
availableTags: '<',
minigrids: '<'
},
controller: ['$scope', '$element', function ($scope, $element) {
$scope.$parent.child = $scope;
$scope.onGapRequest = false;
$scope.changeToOnGapRequestPage = function() {
$scope.onGapRequest = true;
}
…
下面是我的子组件:
(function() {
'use strict';
angular.module('newScheduler').component('nsGapRequests',
{
require:{editModalCtrl : "^editModal"},
bindings: {
gap: "=",
minigrids:"<"
},
templateUrl: "Scripts/NewScheduler/Templates/Modals/nsGapRequestsModal.html",
controller: [function () {
var self = this;
self.$onInit = function() {
console.log(self);
}
console.log(self.gap);
console.log(self.minigrids);
if (!self.assignToOption) {
self.assignToOption = { chosenRequester: null };
}
self.requesters = self.minigrids.map(function (minigrid) {
return minigrid.gridRows;
}).reduce(function(a, b) {
return a.concat(b);
})
.map(function (gridRows) {
return gridRows.user;
})
.filter(function (value, index, array) {
return array.indexOf(value) === index;
})
.filter(function(user) {
return self.gap.requests.indexOf(user.id) !== -1;
});
}],
controllerAs: "gapRequests"
});
})();
但是我不明白为什么我不能访问父控制器:子组件成员的控制台日志
和出于某种原因editModalCtrl是空的(但它不应该是!!)
如果有人能在这方面帮助我,我将非常感激。欢呼。Controller实际上不是空的,你只是没有在它上面定义任何属性/方法。你用的是$scope
。尝试添加一些成员并检查:
controller: ['$scope', '$element', function ($scope, $element) {
var self = this;
self.someMember = true;
self.someMethod = function() {
}
}
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何将一个变量从一个控制器传递到合金中的另一个控制器
- 如何从AngularJs中的另一个控制器访问控制器
- 单击angularjs中的另一个控制器时重新加载控制器
- Angularjs - 观察模态窗口从另一个控制器关闭
- 在一个控制器中更新服务变量,并在另一个控制器 - Angular JS中使用更新的值
- 如何使用javascript express node将变量从控制器中的一个方法公开.js到另一个控制器.js
- 将数据从控制器传递到另一个控制器
- 如何从另一个控制器更新控制器的ng重复模型
- 使用DOM中的信息创建一个控制器/服务来持久化数据
- 从另一个控制器调用一个控制器
- 无法更改呼叫另一个控制器
- 如何让一个变量从一个控制器到一个js文件,再到一个渲染的分部
- angularjs调用另一个控制器's函数
- 访问一个控制器的ng隐藏值以在全局控制器中操纵另一个控制器中的ng样式
- 2个不同的控制器:在其中一个控制器的动作上隐藏元素
- 无法使用typescript访问angular中另一个控制器中声明的$rootscope属性
- AngularJS使用MVC动态获取html,附加到主体,并绑定一个控制器
- 角度-将数组中的信息从一个控制器传递到另一个控制器
- AngularJS:一个控制器中更新不同控制器中的值的事件