2014-11-05 86 views
0

我正在尝试向角度中动态构造的div添加一个控制器。但是,控制器似乎并未加载,我无法将相应的事件添加到点击功能中。在AngularJS中添加控制器到动态构造的div

在下面的例子中,我在称为'employeeTableCtrl'的独立父控制器中构造了这个div。在父控制器内,当用户点击'更多信息'按钮时,新的div被构建。在这个孩子的容器中,我正在寻找附加一个新的控制器。

$scope.moreInfo = function(employee) { 
    $("<div class='employeeWindow' ng-controller='employeeWindowCtrl'> " + 
       "<button class='closeButton' ng-click='close()'> x </button> </div>".appendTo("#employees");  
    } 

,独立的控制器我:都被正确地构建

.controller('employeeWindowCtrl', [ 
    '$scope', function ($scope) { 
     $scope.close = function() { 
      alert('clicked the x'); 
     } 
    } 
]) 

的DIV,但在“employeeWindowCtrl”没有被安装成我的“点击()”函数没有被执行。

有没有人有任何提示?也许我接近这一切都是错误的?

感谢

+0

似乎是一种奇怪的做事方式。 ng-show可能会处理所有这些 - 只需制作并有条件显示即可。 – 2014-11-05 14:54:38

+0

我认为你正在接近一切错误。让角创建所需的元素,而不是从您的控制器操纵DOM。控制器不是那样的。例如,你可以使用'ng-if'指令。 – akonsu 2014-11-05 14:54:58

+0

如果你使用代码以外的代码注入html,你需要使用'$ compile',这样角度就知道它了。正如其他人已经注意到这是一个可怕的方法 – charlietfl 2014-11-05 14:57:38

回答

0

什么你要找的是一个指令 - HTML的块,它具有一种通过链接功能专用控制器。在单独的模板中创建指令,在指令的链接函数中放置控制器的功能(如果确实适用于控制器),并使用ng-show在点击时显示。如果我们有更多的代码可以玩,我可以举一个更好的例子。

https://docs.angularjs.org/guide/directive