Javascript 基于角度的三条件按钮

Javascript 基于角度的三条件按钮,javascript,angularjs,laravel,zurb-foundation,Javascript,Angularjs,Laravel,Zurb Foundation,我对Angular是个新手,我对它的所有文档都感到迷茫 问题: 我正在尝试创建一个按钮,它有三个阶段: 添加用户-删除请求-删除用户 因此,如果要添加用户,请单击添加按钮 向服务器发送ajax请求,如果成功,则单击按钮 然后应变为挂起按钮 在挂起状态下,如果您再次单击它,您的请求将被删除 已删除,它将再次返回到添加按钮 第三个阶段也是,如果用户接受了您的请求,那么 当您单击时,将看到一个删除用户按钮 您将再次看到“添加”按钮,如果单击该按钮,您将获得 挂起按钮等等 因此,如果你一直在使

我对Angular是个新手,我对它的所有文档都感到迷茫

问题: 我正在尝试创建一个按钮,它有三个阶段:

添加用户-删除请求-删除用户

  • 因此,如果要添加用户,请单击添加按钮 向服务器发送ajax请求,如果成功,则单击按钮 然后应变为挂起按钮

  • 在挂起状态下,如果您再次单击它,您的请求将被删除 已删除,它将再次返回到添加按钮

  • 第三个阶段也是,如果用户接受了您的请求,那么 当您单击
    时,将看到一个删除用户按钮 您将再次看到“添加”按钮,如果单击该按钮,您将获得 挂起按钮等等

因此,如果你一直在使用社交网络,它基本上是一个熟悉的按钮

加载页面时,用户将看到用户以及基于其当前状态的每个用户的按钮(因此服务器将处理此部分)。从这一部分开始,Angular应该处理ajax调用和每个用户连接请求的按钮更改

我需要什么: 我已经完成了发送请求的Ajax部分。但是,我无法处理Angular需要将按钮更改为新状态的部分(对于列表中的特定用户,这意味着列表中有多个用户,您可以发送连接添加/挂起/删除请求)。我尝试了不同的解决方案,但至今失败

我的一些混乱的失败代码没有完成:

角度控制器:

foundationApp.controller('ConnectionButtonCtrl', function ($scope, $http) {
    $scope.addUser = function(id) {
            $http({
            method  : 'GET',
            url     : '/api/connections/add/'+id,
            dataType: "html",
        })
        .success(function() {
            $scope.activeId;
            $scope.activeId = id;
            $scope.isAdd = function(id){
                return  $scope.activeId === id;
            };

        })
    };
    $scope.removeRequest = function(id) {
            $http({
            method  : 'GET',
            url     : '/api/connections/removeRequest/'+id,
            dataType: "html",
        })
        .success(function() {
        })
    };

});
<span ng-controller="ConnectionButtonCtrl"  >
    <a class="label radius fi-plus" ng-show="!isRemove(1)" ng-click="addUser(1)"></a>
    <a class="label radius fi-clock info" ng-show="isRemove(1)" ng-click="removeRequest(1)"></a>
    <a class="label radius fi-x alert" ng-show="!isAdd(1)" ng-click="removeUser(1)"></a>
</span>
Laravel刀片视图:

foundationApp.controller('ConnectionButtonCtrl', function ($scope, $http) {
    $scope.addUser = function(id) {
            $http({
            method  : 'GET',
            url     : '/api/connections/add/'+id,
            dataType: "html",
        })
        .success(function() {
            $scope.activeId;
            $scope.activeId = id;
            $scope.isAdd = function(id){
                return  $scope.activeId === id;
            };

        })
    };
    $scope.removeRequest = function(id) {
            $http({
            method  : 'GET',
            url     : '/api/connections/removeRequest/'+id,
            dataType: "html",
        })
        .success(function() {
        })
    };

});
<span ng-controller="ConnectionButtonCtrl"  >
    <a class="label radius fi-plus" ng-show="!isRemove(1)" ng-click="addUser(1)"></a>
    <a class="label radius fi-clock info" ng-show="isRemove(1)" ng-click="removeRequest(1)"></a>
    <a class="label radius fi-x alert" ng-show="!isAdd(1)" ng-click="removeUser(1)"></a>
</span>

如果我理解正确,只需使用$index或user.id即可。我假设您的按钮与用户位于同一行。如果这是真的,那么您可能正在使用ng repeat

例如:

<div ng-repeat="user in users">
  <a class="label radius fi-plus" ng-show="!isRemove(user.id)" ng-click="addUser(user.id)"></a>
  <a class="label radius fi-clock info" ng-show="isRemove(user.id)" ng-click="removeRequest(user.id)"></a>
  <a class="label radius fi-x alert" ng-show="!isAdd(user.id)" ng-click="removeUser(user.id)"></a>
  <div> some user information {{user.name}} </div>      
</div>

一些用户信息{{user.name}
然后可以通过ajax请求传递用户id。您还可以使用$index(作为我的代码中的参数,而不是数组中用户的索引)。

演示:

js

var app = angular.module('myApp', []);
app.controller('myController', function ($scope) {
  $scope.users = {
      user1: {
        'status': 'add',
        'statusClass': 'positive'
      },
      user2: {
        'status': 'pending',
        'statusClass': 'waiting'
      },
      user3: {
        'status': 'remove',
        'statusClass': 'negative'
      }
  };

  $scope.handle = function (user) {
    if (user.status === 'add') {
      alert('send request to the user');
      user.status = 'pending';
      user.statusClass = 'waiting'
    }
    else if (user.status === 'pending') {
      alert('send request to discard a connection req');
      user.status = 'add';
      user.statusClass = 'positive'
    }
    else {
      alert('send req for removal');
      user.status = 'add';
      user.statusClass = 'positive'
    }
  };
});

app.$inject = ['$scope'];
HTML

<body ng-app="myApp" ng-controller="myController">
  <div ng-repeat="user in users">
    User {{$index+1}} - <button ng-click="handle(user)" ng-class="user.statusClass">{{ user.status }}</button>
  </div>
</body>

用户{{$index+1}}-{{User.status}

什么是$connection->id?(我不熟悉laravel)@NexusDuck我忘了提到“{{”和“}}}”是用于PHP框架视图(blade)的,我已经将Angular的语法更改为“”,因此不会出现错误conflicts@NexusDuck假设这些是行号或只是我们要连接到的用户id,例如:ng show=“!isremove(1)”删除请求不应该是
DELETE
类型而不是
GET
?@softvar服务器端处理得很好。我正在努力获取作用域的ID,并告诉控制器仅将特定作用域的例如isAdd的值设置为true或false。我同意这一部分。我需要的是控制器告诉ng show,例如scope.isRemove(user.id)=true。这就是我正在努力解决的问题,我无法使用(controller.js文件的)scope部分中的user.id为其提供真值或假值。我仍然不确定我是否理解,但通常对于这样的场景,我有一个var,例如,$scope.added,它是一个数组$scope.added=[]。然后,数组的每个元素表示(在您的例子中)每个用户行的状态。因此$scope.added[$index]=true意味着索引n处的用户为true。如果希望与user.id相关,也可以使用哈希。我希望这会有所帮助。正如您所看到的,我没有使用ng repeat,循环是通过php在服务器端完成的。然而,你的代码给了我很多帮助。如何在控制器中获取索引id以更新特定用户的范围而不重复ng?如何呈现没有循环的用户?是否为每个用户发送单独的req?