0

我的控制器有问题。我使用离子(角度)和 js 数据。当我通过添加新项目addItem()时,只有在通过 F5 重新加载页面时才会看到它。

这是我的代码:

.controller('FooCtrl', function($scope, $ionicPlatform, foo) {
    $ionicPlatform.ready(function() {
        foo.findAll().then(function (items) {
            $scope.items = items;
        });
    });

    $scope.item = {};
    $scope.addItem = function () {
        foo.create({ name: $scope.item.name });
    };
})

如果不先在浏览器窗口中按 F5,我需要做什么才能看到新元素?

4

4 回答 4

1

您正在创建一个项目并更新数据库。但你没有更新$scope.items。所以将项目推送到$scope.items或者您可以在创建后立即调用此代码。它会更新你 $scope.items

foo.findAll().then(function (items) {
                $scope.items = items;
            });

使用此代码:

.controller('FooCtrl', function($scope, $ionicPlatform, foo) {
    $ionicPlatform.ready(function() {
        foo.findAll().then(function (items) {
            $scope.items = items;
        });
    });

    $scope.item = {};
    $scope.addItem = function () {
        foo.create({ name: $scope.item.name });
        $scope.items.push({ name: $scope.item.name });
    };
})

或者

.controller('FooCtrl', function($scope, $ionicPlatform, foo) {
    $ionicPlatform.ready(function() {
        foo.findAll().then(function (items) {
            $scope.items = items;
        });
    });

    $scope.item = {};
    $scope.addItem = function () {
        foo.create({ name: $scope.item.name });
           foo.findAll().then(function (items) {
                $scope.items = items;
            });
    };
})
于 2015-04-22T19:13:14.113 回答
0

您没有将创建的项目存储在控制器中的任何位置。我认为 foo.create 返回一个项目,对吗?如果是这样的话,也许这样的事情可以工作:

$scope.addItem = function () {
    var item = foo.create({name: $scope.item.name});
    // this assumes that $scope.items is an array
    $scope.items.push(item);
};
于 2015-04-22T19:15:29.480 回答
0

如果您使用的是js-data-angular,那么您也可以这样做:

.controller('FooCtrl', function($scope, $ionicPlatform, foo) {
  $ionicPlatform.ready(function() {
    // retrieve that initial list of items
    foo.findAll();

    // $scope.items will be kept up-to-date with
    // the foo items in the store
    foo.bindAll(null, $scope, 'items');
  });

  $scope.item = {};
  $scope.addItem = function () {
    // thanks to the bindAll above, the
    // created item will be rendered
    // automatically
    foo.create({ name: $scope.item.name });
  };
})
于 2015-10-30T07:02:31.807 回答
-1

这可能会解决问题:

 foo.findAll().then(function (items) {
            $scope.items = items;
            $scope.$apply();
        });
于 2015-04-22T19:12:13.120 回答