如何在添加新元素后更新我的$ scope?

时间:2015-04-22 19:05:15

标签: javascript angularjs ionic jsdata

我的控制器出了问题。我使用离子(角度)和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 个答案:

答案 0 :(得分: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;
            });
    };
})

答案 1 :(得分: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);
};

答案 2 :(得分: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 });
  };
})

答案 3 :(得分:-1)

这可能会解决问题:

\n