6

有一个从 rest api 检索到的用户列表。这是模板

<div ng:controller="UserController">
    <a ng-click="createUser()">Create User</a>

    <div ng-view>
        <ul>
            <li ng-repeat="user in users">
                 {[{user.first_name}]} {[{user.last_name}]} 
            </li>
        </ul>
    </div>
 </div>

JS:

function UserController($scope, User, Group){
    $scope.users = User.query();

    $scope.createUser = function(){

        //$scope.users = null;
        //$scope.users.pop();
        //$scope.users.push(new User({id:'5'}));

        console.log($scope.users);
    }
}

服务:http ://dpaste.com/1065440/

正确检索并列出了所有用户。问题是我根本无法操纵呈现的列表。无论我做什么推送、弹出或设置为空。该列表不会在模板中更改。然而,最后一条日志语句显示了更改,当用户数组设置为 null 时,它会打印例如 NULL。

任何想法问题出在哪里?

4

2 回答 2

5

您推入数组的对象应该是User

function UserController($scope, User){

    $scope.users = User.query();

    $scope.createUser = function(){
        $scope.users.push(new User({first_name:'Bob', last_name: 'Schmitt'}));
    }   
}

所以,使用new User({})

从我们的谈话来看,问题似乎出在路由上。将相同的外部控制器分配给正在加载到ng-view. 删除按钮ng:controller="UserController"并将其移动createUser到部分将解决问题,但如果确实需要createUser从外部调用该方法ng-view,则与其相关的所有数据都需要在外部控制器中。因此,您可以保持外部控制器不变,并更改路线以使用空的占位符控制器。

于 2013-04-19T21:55:43.457 回答
3

确保正在调用 createUser。IE ng-click 什么的。

<button type="button" ng-click="createUser()">Create User</button>

您的推送功能看起来是正确的,但是您在 html 中的绑定看起来是错误的。它应该是双大括号。

<li ng-repeat="user in users">
    {{user.first_name}} {{user.last_name}}
</li>

添加了我之前在添加对象时使用的示例。

<div ng-app="main">
    <div ng-controller="MyCtrl">
        <button ng-click="add()" >Add</button>
        <div id="container">
            <div ng-repeat="test in tests>{{test.name}}</div>
        </div>
    </div>
</div>


$scope.tests = {};

$scope.add = function() {
   var newTest = {name: 'Test Message'};

   $scope.tests.push(newTest);
};
于 2013-04-19T21:55:37.053 回答