从模板到控制器以及从控制器到服务的角度传递参数

时间:2013-11-20 14:56:12

标签: angularjs angularjs-scope angular-resource

我有一个使用资源创建和使用API​​Rest列表的代码,我需要将模板中的Id传递给控制器​​,从控制器传递给服务。

这是我的代码:

Template.html

<div class="industrialists" ng-app="cliConsApp">
    <ul class="table" ng-controller="industrialistCtrl" ng-init="init('{{ constructionPrivateInformationId }}')">
        <form name="myForm">
            <input type="text" id="userName" ng-model="industrialist.user" placeholder="User name"/>
            <input type="text" id="jobName" ng-model="industrialist.job" placeholder="Job name"/>
            <a ng-click="createNewUser()" class="btn btn-small btn-primary">create new user</a>
        </form>

        <li ng-repeat="industrial in industrialists">
            [[industrial.job.name]]
        </li>
    </ul>
</div>

app.js

var cliConsApp = angular.module('cliConsApp',['uTrans', 'cliConsApp.controllers', 'cliConsApp.services' ]).
    config(function($interpolateProvider){
        $interpolateProvider.startSymbol('[[').endSymbol(']]');
    }
);;

services.js

var services = angular.module('cliConsApp.services', ['ngResource']);

services.factory('IndustrialistsFactory', function ($resource) {
    return $resource(
        '/app_dev.php/api/v1/constructionprivateinformations/:id/industrialists',
        {id: '@id'},
        {
            query: { method: 'GET', isArray: true },
            create: { method: 'POST'}
        }
    )
});

controllers.js

var app = angular.module('cliConsApp.controllers', []);

app.controller('industrialistCtrl', ['$scope', 'IndustrialistsFactory',

    function ($scope, IndustrialistsFactory) {

        $scope.init = function (id) {

            $scope.id=id;
            $scope.industrialists= IndustrialistsFactory.query({},{id: $scope.id});

            $scope.createNewUser = function (id) {
                IndustrialistsFactory.create($scope.industrialist, {id: $scope.id});
                $scope.industrialists = IndustrialistsFactory.query({id: $scope.id});

            }
        }
}]);

我在CreateNewUser中遇到问题,因为服务没有重新识别id和url不正确。

我怎么做?

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在重大问题。您已声明模型不是直接在控制器内部,而是在init函数内部。这限制了它们的范围并打破了像ng-click="createNewUser()"这样的表达式。将它们移出:

app.controller('industrialistCtrl', ['$scope', 'IndustrialistsFactory',
    function ($scope, IndustrialistsFactory) {
        $scope.id = "";

        $scope.industrialists = [];

        $scope.createNewUser = function (id) {
            // update the models here
        }

        $scope.init = function (id) {
            // update the models here
        }
}]);