首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用指令从控制器切换元素上的幻灯片动画?

如何使用指令从控制器切换元素上的幻灯片动画?
EN

Stack Overflow用户
提问于 2013-01-18 21:02:56
回答 1查看 4.2K关注 0票数 5

我对以下情况感到困惑。假设我有一张有行的桌子。当用户单击表中的按钮时,我希望用户窗体使用jQuery向下滑动,并使用选定的行值显示表单。下面是我目前正在做的事情,这是不太有意义的:

视图

代码语言:javascript
复制
<tr ng-click="setItemToEdit(item)" slide-down-form>

..。

代码语言:javascript
复制
<form>
   <input type="test" ng-model={{itemToEdit.Property1}} >
   <button ng-click=saveEditedItem(item)" slide-up-form>
<form>

控制

代码语言:javascript
复制
$scope.itemToEdit = {};

$scope.setItemToEdit = function(item) {
    $scope.itemToEdit = item;
});

$scope.saveEditedItem = function(item) {
   myService.add(item);
   $scope.itemToEdit = {};
}

指令-滑动-向上/滑动-向下

代码语言:javascript
复制
var linker = function(scope, element, attrs) {
    $(form).slideUp(); //or slide down           
}

看来我的指令和我的控制逻辑太断开了。例如,如果存在保存错误,会发生什么情况?由于slideUp事件已经完成,表单已经隐藏。在这种情况下,我很可能希望阻止slideUp操作。

我只使用了AngularJS大约一个星期,所以我肯定有些东西我错过了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-18 21:22:43

当然,这是个常见的问题.解决这个问题的一种方法是:基本上在指令中使用带有$watch的布尔值来触发表单的切换。除此之外,您只需将窗体上的一个变量设置为要编辑的对象。

下面是一些psuedo代码中的一般想法:

代码语言:javascript
复制
//create a directive to toggle an element with a slide effect.
app.directive('showSlide', function() {
   return {
     //restrict it's use to attribute only.
     restrict: 'A',

     //set up the directive.
     link: function(scope, elem, attr) {

        //get the field to watch from the directive attribute.
        var watchField = attr.showSlide;

        //set up the watch to toggle the element.
        scope.$watch(attr.showSlide, function(v) {
           if(v && !elem.is(':visible')) {
              elem.slideDown();
           }else {
              elem.slideUp();
           }
        });
     }
   }
});

app.controller('MainCtrl', function($scope) {
   $scope.showForm = false;
   $scope.itemToEdit = null;

   $scope.editItem = function(item) {
       $scope.itemToEdit = item;
       $scope.showForm = true;
   };
});

标记

代码语言:javascript
复制
<form show-slide="showForm" name="myForm" ng-submit="saveItem()">
    <input type="text" ng-model="itemToEdit.name" />
    <input type="submit"/>
</form>
<ul>
   <li ng-repeat="item in items">
         {{item.name}}
        <a ng-click="editItem(item)">edit</a>
   </li>
</ul>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14407572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档