javascript - $http 中的 Angular 1 数据绑定(bind) promise 不起作用

标签 javascript angularjs

我有一个页面,其中存在 add new user按钮显示用于提交表单的 Angular 模板。表单提交方法绑定(bind)到submit方法User Controller 。表单将提交到服务器并获取响应,但代码 $scope.users = []不起作用。我观察到console.log($scope.users)打印已列出的用户,但我希望由于 $scope.users = [] 将它们从 View 中删除行但这种情况不会发生。看来这里的数据绑定(bind)有问题。

users.html :

<div ng-controller = "UserController as uc">
    /***** table was omitted ********/ 
    <button type="button" ng-click="showForm()" class="btn btn-info">show new form</button>
    <div ng-show="pc.formVisible" ng-include="'assets/templates/new_user.html'"></div>
</div>

new_user.html :

<div class="new-user-form">
    <form ng-submit="submit()" ng-controller="UserController">
        /******* form groups omitted *********/
        <button type="submit" class="btn btn-default">submit!</button>
    </form>
</div>

app.js :

(function() {
    var app = angular.module('MyStock', ['ui.bootstrap']);

    app.controller('UserController', ['$scope', '$http', '$uibModal', function($scope, $http, $uibModal) {
        $scope.users = [];
        var formVisible = false;
        var cntl = this;
        cntl.formVisible = false;
        $http.get('http://127.0.0.1:8080/api/customers', method='jsonp').success(function (data) {
            $scope.users = data;
        });

        $scope.showForm = function() {
            cntl.formVisible = true;
        };

        $scope.submit = function() {
            $http({
                method: 'POST',
                url     : 'http://127.0.0.1:8080/api/customers',
                data: $scope.user,
                headers : {'Content-Type': 'application/x-www-form-urlencoded'}
            }).then(function(response) {
                console.log($scope.users);
                $scope.users = [];
            });
        };

    }]);
})();

最佳答案

这里的问题是您有两个 Controller ,从而改变了范围。 您有一个父 Controller ,即 UserController as uc 和第二个 Controller ,没有别名。问题是它们的范围不同。 当您点击提交时,您要求回调从非别名 Controller 中清除数组。

这是一个例子。 第一个列表和最后一个列表相同,但引用方式不同。一个直接与 vm.users 绑定(bind),最后一个包含 $parent.vm,告诉 Angular 它正在使用它的父作用域。

(function() {
  
  var app = angular.module('app', []);

  app.controller('MainController', ['$http', MainController]);
  
  function MainController($http) {
    
    var self = this;
    
    self.users = ['MNO', 'PQR', 'STU', 'VWX'];
    
    self.clearUsers = function() { self.users = []; };
  }
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="app" ng-controller="MainController as vm">
  //Users from parent scope
  <div ng-repeat="user in vm.users"> {{user}} </div>
  <button ng-click="vm.clearUsers()"> Clear </button><br/>
  //Users from this scope
  <div ng-controller="MainController as mc">
    <div ng-repeat="user in mc.users"> {{user}} </div>
    <button ng-click="mc.clearUsers()">Clear</button>
  </div>
  //Clear users from parent scope
  <div ng-controller="MainController as mc2">
    <div ng-repeat="user in $parent.vm.users"> {{user}} </div>
    <button ng-click="$parent.vm.clearUsers()">Clear</button>
  </div>
  
</div>

关于javascript - $http 中的 Angular 1 数据绑定(bind) promise 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073875/

相关文章:

javascript - 无法理解 Node.js 中的错误

javascript - 在调用 setState 之前修改 React 组件状态

javascript - 什么是 Angular Material 中的 mdLiveAnnouncer 及其工作原理?

javascript - 如何使用 jquery 简化我的代码?

javascript - 使用 Typescript 通过 useRef react native 文本输入焦点

javascript - CORS 不适用于 chrome 中的 Angular 2

javascript - 为什么 ng-show 在 Angular 上不能正常工作?

angularjs - 打印到控制台时,读取列表仅显示数组的一半

javascript - 如何删除空图像框?

angularjs - 如何使用 angularjs 真正防止元素被放入 DOM