我正在構建一個指令,該指令將創建一個輸入列表。當你開始在第一個輸入中輸入信息時,在你正在工作的那個下面附加一個空輸入。AngularJS:由其父代追加的子指令找不到其父控制器
我有這個plunkr工作的第一個輸入。麻煩的是第二個輸入不會附加任何東西。
我得到這個錯誤:錯誤:[$ compile:ctreq]找不到指令'child'所需的控制器'parent'!
我懷疑我需要去添加不同的新輸入,但我不確定如何。
我已經檢查了其他帖子在堆棧溢出,他們已經得到了這個有幫助,但他們都沒有解決與父控制器保持溝通的問題。
這裏是父指令:
app.directive('parent', function() {
return {
restrict: 'AE',
template: '<child name="0"></child>',
controller: function($scope, $compile, $element) {
// adds a new input within the parent
this.addChild = function(counter) {
$element.append($compile('<child name="' + counter + '"></child>')($scope));
}
}
}
});
這裏是孩子的指令:
app.directive("child", function() {
return {
restrict: "E",
scope: {},
replace: true,
require: '^parent',
controller: function($scope, $attrs) {
$scope.x = $attrs;
$scope.directiveModel = "";
$scope.$watch('directiveModel', function() {
$scope.$parent.myModel[$attrs.name] = $scope.directiveModel;
});
},
template: '<div><input type="text" name="{{x.name}}" ng-model="directiveModel"></div>',
link: function($scope, $element, attr, parentCtrl) {
var fieldCounter = 0;
var oldLength = 0;
$scope.$watch('directiveModel', function() {
// logic to determine if a new input needs to be added based on directiveModel's length
// only add inputs when directiveModel.length is going from 0 to 1
if ($scope.directiveModel.length == 1) {
if (oldLength === 0) {
fieldCounter++;
parentCtrl.addChild(fieldCounter);
}
} else if ($scope.directiveModel.length === 0) {
if (oldLength == 1 && fieldCounter > 0) {
fieldCounter--;
$element.remove();
}
}
oldLength = $scope.directiveModel.length;
}, true);
}
};
});
,這裏是標記
<body ng-controller="MainCtrl">
<parent></parent>
<pre>{{myModel | json}}</pre>
</body>
請代碼添加到你的問題中您的標記,而不僅僅是plunkr –
像ogc-nick說的:請添加你的代碼 – displayname