代码之家  ›  专栏  ›  技术社区  ›  Ohjay44

Angular JS“Controller as”语法无效

  •  1
  • Ohjay44  · 技术社区  · 9 年前

    我以前构建过一个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 回复  |  直到 9 年前
        1
  •  14
  •   Raulucco    9 年前

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

    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上使用了self变量,但尚未初始化它