这里我试图用一个占位符div替换一个按钮,按钮将会转到上面板。当按钮返回到下面板时,ng-click不再起作用。 我需要按钮像之前那样工作。 我不能使用$编译,因为它将子添加到下面板,但我只需要替换。这里是我的plunkerng-click无法替换元素
// Code goes here
(function() {
'use strict';
angular.module('demo', [
// Angular modules
//'dndLists'
]);
angular
.module('demo')
.controller('buttonController', buttonController);
buttonController.$inject = ['$scope','$compile','$document'];
function buttonController($scope,$compile,$document) {
/* jshint validthis:true */
var vm = this;
vm.title = 'buttonController';
var btns=[
{name:'btn-1',class:'active'},
{name:'btn-2',class:'active'},
{name:'btn-3',class:'active'},
{name:'btn-4',class:'active'}
];
$scope.answerButtons = [];
$scope.buttons = btns;
$scope.pushArray = function (item,$event) {
//inset new element to upper panel
$scope.answerButtons.push(item);
//replace lower element with a laceholder
var oldElem=angular.element($event.target);
var parentNode=oldElem[0].parentNode;
var newNode=document.createElement('div');
newNode.className='placeholder';
newNode.id=item.name;
parentNode.replaceChild(newNode,oldElem[0]);
};
$scope.removeArray = function (item) {
//remove element from upper panel
var index = $scope.answerButtons.indexOf(item);
$scope.answerButtons.splice(index, 1);
//create new element for replacing into lower panel
var newNode=document.createElement('div');
newNode.appendChild(document.createTextNode(item.name));
newNode.className='btn btn-primary active';
var att=document.createAttribute("ng-repeat");
att.value="item in buttons";
newNode.setAttributeNode(att);
att=document.createAttribute("ng-click");
att.value="pushArray(item,$event)";
newNode.setAttributeNode(att);
//Replace previous elemnt in place of place holder
var oldElem=document.getElementById(item.name);
var parentNode=oldElem.parentNode;
parentNode.replaceChild(newNode,oldElem);
};
}
})();
您需要编译控制器作用域的元素 – ngLover
plunker链接不工作 – vpsingh016
$ compile(parentNode.contents())($ scope);在最后的删除方法中试试这个 – ngLover