Angular JS“Controller as”语法不起作用

时间:2015-03-31 14:14:12

标签: javascript angularjs angularjs-scope angularjs-controller

我之前已经构建了一个AngularJS项目并且熟悉语法。我的ng-controller="UniversalCtrl as universal"周围的这个时间不起作用,我已经尝试了一切。如果我采用universal.showHeader == true并将其更改为showHeader == true则可行,但我需要将其作为universal的变量。就像我说的,我有其他项目遵循相同的结构,他们工作正常。

这是我的HTML代码:

<!DOCTYPE html>
<html>
    <head lang="en">
       <meta http-equiv="cache-control" content="no-store" />
       <meta http-equiv="expires" content="0" />
       <meta http-equiv="X-UA-Compatible" content="IE=edge" />
       <meta http-equiv="pragma" content="no-store" />
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes">

       <link href="styles/MarkStrap.css" rel="stylesheet" />
       <link href="styles/Site.css" rel="stylesheet" />

        <script type="text/javascript" src="js/Angular/angular.min.js"></script>
        <script type="text/javascript" src="js/Angular/angular-route.min.js"></script>
        <script type="text/javascript" src="js/Universal/Universal.js"></script>
        <script type="text/javascript" src="js/Universal/Filters.js"></script>
        <script type="text/javascript" src="js/Universal/Directives.js"></script>

        <title>WIN</title>
        <link rel="shortcut icon" href="winIcon.ico">
    </head>
    <body ng-app="winApp" ng-controller="UniversalCtrl as universal">

       <index-header ng-show="universal.showHeader == true"></index-header>
       <ng-view></ng-view>

       <script type="text/javascript" src="js/Applications/Applications.js"></script>
    </body>
</html>

这是我的Universal.js设置:

(function () {
    var winSystem = angular.module('winApp', ['ngRoute']);

    winSystem.config(function ($sceProvider, $routeProvider) {
        $routeProvider
                .when('/Applications', {
                    templateUrl: "view-app.html",
                    controller: "AppController"
                })
                .otherwise({
                    templateUrl: "404.html"
                })
    });

    winSystem.service("sharedData", function () {
        var reloadData = false;
        var beginAppLoad = false;
        var reloadNotes = false;

        self.httpGet = function (http, url, callback) {
            http.get(baseUrl + url, {
                headers: { "Session-Id": localStorage.ogSessionId }
            }).success(function (data) {
                callback(data);
            }).error(function (data, status, headers, config) {
                if (status == "401") {
                    localStorage.removeItem("ogSessionId");
                    localStorage.removeItem("ogUserId");
                    window.location.href = loginUrl;
                }
            });
        };

        self.httpPost = function (http, url, content, callback) {
            http.post(baseUrl + url, {
                Content: JSON.stringify(content)
            }, {
                headers: {
                    "Session-Id": localStorage.ogSessionId
                }
            })
                .success(function (data) {
                    callback(data);
                })
                .error(function (data, status, headers, config) {
                    if (status == "401") {
                        localStorage.removeItem("ogSessionId");
                        localStorage.removeItem("ogUserId");
                        window.location.href = loginUrl;
                    }
                });
        };


    });

    winSystem.controller("UniversalCtrl", ['$scope', '$http', 'sharedData', function ($scope, $http, sharedData) {
        var self = $scope;

        self.sharedDataSvc = sharedData;
        self.isLocal = false;

        if (location.href.indexOf("localhost") > -1) {
            self.isLocal = true;
        } else self.isLocal = false;

        self.account = {};
        self.actions = [];
        self.notifications = [];

        self.alertCount = 0;
        self.showAlert = false;
        self.showHeader = true;
        self.alertMessage = "";

    }]);
})();

1 个答案:

答案 0 :(得分:14)

您将模型绑定到范围对象而不是控制器实例。 尝试:

winSystem.controller("UniversalCtrl", ['$http', 'sharedData', function ($http, sharedData) {
    var self = this;

    self.sharedDataSvc = sharedData;
    self.isLocal = false;

    if (location.href.indexOf("localhost") > -1) {
        self.isLocal = true;
    } else self.isLocal = false;

    self.account = {};
    self.actions = [];
    self.notifications = [];

    self.alertCount = 0;
    self.showAlert = false;
    self.showHeader = true;
    self.alertMessage = "";

}]);

我注意到你在服务sharedData上使用自变量但你还没有初始化它。就像'var self = this;'

一样