如何使用angular.js在DOM周围移动视图?

bit*_*wit 4 javascript angularjs

如何使用角度js将元素移动到DOM中的不同位置?

我有一个像这样的元素列表

<ul id="list" ng-controller="ListController">
    <li ng-controller="ItemController"><div>content</div></li>
    <li ng-controller="ItemController"><div>content</div></li>
    <li ng-controller="ItemController"><div>content</div></li>
    <li ng-controller="ItemController">
        <div>content</div>
        <div id="overlay"></div>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我想要完成的是将#overlay从一个地方移到另一个地方而不必在我标记为隐藏/未隐藏的每个项目中都有隐藏的副本.

如果这是jquery我可以做这样的事情:

$("#overlay").appendTo("#list li:first-child");
Run Code Online (Sandbox Code Playgroud)

是否有相同的方法来做角度?

pko*_*rce 11

由于您的澄清,我可以理解您有一个项目列表.您希望能够在此列表中选择一个项目(滑动但可能还有其他事件),然后为所选项目显示其他DOM元素(div).如果选择了其他项目,则应该取消选择 - 这样只有一个项目应该显示另一个div.

如果上述理解是正确的,那么您可以使用这样的简单ng-repeat和ng-show指令来解决这个问题:

<ul ng-controller="ListController">
    <li ng-repeat="item in items">
        <div ng-click="open(item)">{{item.content}}</div>
        <div ng-show="isOpen(item)">overlay: tweet, share, pin</div>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

控制器中的代码所在的位置(仅显示其片段):

$scope.open = function(item){
    if ($scope.isOpen(item)){
        $scope.opened = undefined;
    } else {
        $scope.opened = item;
    }        
};

$scope.isOpen = function(item){
    return $scope.opened === item;
};
Run Code Online (Sandbox Code Playgroud)

这是完整的jsFiddle:http://jsfiddle.net/pkozlowski_opensource/65Cxv/7/

如果您担心有太多的DOM元素,可以使用ng-switch指令实现相同的功能:

<ul ng-controller="ListController">
    <li ng-repeat="item in items">
        <div ng-click="open(item)">{{item.content}}</div>
        <ng-switch on="isOpen(item)">
            <div ng-switch-when="true">overlay: tweet, share, pin</div>
        </ng-switch>        
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这是jsFiddle:http://jsfiddle.net/pkozlowski_opensource/bBtH3/2/

  • 这就是为什么同时描述了ngShow和ngSwitch选项的原因 - 人们可以选择保留DOM节点. (2认同)