2013-05-05 82 views
1

我正在用angularJS做一个chrome扩展,现在我有一个问题。

我想在弹出的页面中添加一些按钮,并且我想要点击按钮时,它的祖先节点消失,这是我的代码。

在popup.html

<div class="deadline"> 
    <div class="btn-group"> 
    <button class="btn" ng-click="removeDeadline()">complete</button> 
    </div> 
</div> 

在controller.js

$scope.removeDeadline = function(){ 
    $(this).closest(".deadline").remove(); 
} 

我不知道为什么不起作用。 请帮帮我。

回答

10

首先,$是一个jQuery函数 - 你在扩展中包含jQuery吗?如果没有,angular.element是AngularJS附带的内置“jQuery Lite”的函数。其次,使用AngularJS时,从控制器内部访问DOM元素的操作不正确:Angular是关于自动反映模型状态的视图(通过$scope)。例如,你展示了片段将被更恰当写成:

<div class="deadline" ng-hide="hideLine"> 
    <div class="btn-group"> 
    <button class="btn" ng-click="removeDeadline()">complete</button> 
    </div> 
</div> 
$scope.removeDeadline = function(){ 
    $scope.hideLine = true; 
} 

就拿这句话从the FAQ到心脏:

停止尝试使用jQuery修改DOM的控制器。真。这包括添加元素,删除元素,检索其内容,显示和隐藏它们。使用内置指令,或者在必要时编写自己的指令,以执行DOM操作。请参阅下面的重复功能。

如果您正在努力打破这种习惯,可以考虑从您的应用中删除jQuery。真。 Angular拥有$ http服务和强大的指令,这使得它几乎总是不必要的。 Angular捆绑的jQLite具有一些写作Angular指令最常用的特性,特别是绑定到事件。

+0

谢谢,但我有多个.deadline在我的HTML,我怎么只能删除它,我点击? – plrthink 2013-05-05 08:48:33

+0

哦。我懂了,用'this'。谢谢! – plrthink 2013-05-05 08:51:58

+1

从应用程序中删除jQuery是真正帮助我完成jQuery的处理方式(特别是在控制器中)的方法。伟大的建议。 – lucuma 2013-05-05 15:52:25