AngularJS变量未在html中显示

时间:2016-02-19 12:40:48

标签: javascript html angularjs

结构

statsController.js

(function (module) {
    'use strict';

    var statsController = function ($scope, $rootScope, $timeout, $routeParams, $location, $window, statsService) {
        $scope.$on('$viewContentLoaded', function (event) {
            $window.ga('send', 'pageview', { page: $location.url() });
        });

        var model = {};
        model.stats = {};

        statsService.getStats().then(function (d) {
            model.stats = d;
        });
    };

    module.controller("statsController", statsController);

}(angular.module("app")));

statsService.js

(function (app) {

    var statsService = function (webapi) {

        var model = {};

        model.getStats = function () {
            return webapi.get('stats/getstats');
        }

        return model;
    };

    app.factory("statsService", statsService);
    statsService.$inject = ['webapi'];

}(angular.module("app")))

为stats.html

Total paid customers: {{statsController.model.totalPaidCustomers}}<br/>
Stripe confirmed customers: {{statsController.model.stripeConfirmedCustomers}}<br />

API的结果:

{"totalPaidCustomers":1,"stripeConfirmedCustomers":2}

当我在 statsController.js 中为d.totalPaidCustomers设置alert()时,我得到值1,对于其他参数也是如此。

所以唯一的问题是在html中显示这个。

App.js

.when('/stats', {
            templateUrl: 'tpl/admin/stats.html',
            controller: 'statsController',
            controllerAs: 'stats'
          }).

3 个答案:

答案 0 :(得分:1)

如果我理解正确的话。它应该是&#34; model.stats&#34;

Total paid customers: {{statsController.model.totalPaidCustomers}}

http://jsfiddle.net/f5hb9spz/8/

答案 1 :(得分:0)

尝试将状态定义更改为:

.when('/stats', {
    templateUrl: 'tpl/admin/stats.html',
    controller: 'statsController',
    controllerAs: 'vm'
}).

然后将控制器更改为:

(function (module) {
    'use strict';

    var statsController = function ($scope, $rootScope, $timeout, $routeParams, $location, $window, statsService) {
        $scope.$on('$viewContentLoaded', function (event) {
            $window.ga('send', 'pageview', { page: $location.url() });
        });
        var vm = this;
        vm.model = {};
        vm.model.stats = {};

        statsService.getStats().then(function (d) {
            vm.model.stats = d;
        });
    };

    module.controller("statsController", statsController);

}(angular.module("app")));

最后你的观点是:

Total paid customers: {{vm.model.stats.totalPaidCustomers}}<br/>
Stripe confirmed customers: {{vm.model.stats.stripeConfirmedCustomers}}<br />

如果您没有看到任何内容,请将其放入视图中,看看您拥有的内容:

{{ vm | json }}

答案 2 :(得分:0)

问题是我没有将当前范围分配给模型。

var model = this;

statsController.js

(function (module) {
    'use strict';

    var statsController = function ($scope, $rootScope, $timeout, $routeParams, $location, $window, statsService) {
        $scope.$on('$viewContentLoaded', function (event) {
            $window.ga('send', 'pageview', { page: $location.url() });
        });

        var model = this;
        model.stats = {};

        statsService.getStats().then(function (d) {
            model.stats = d;
        });
    };

    module.controller("statsController", statsController);

}(angular.module("app")));

然后调用html:

Total paid customers: {{stats.stats.totalPaidCustomers}}<br/>
Stripe confirmed customers: {{stats.stats.stripeConfirmedCustomers}}<br />

必须更改var的名称(stats.stats),让我感到困惑。