Angular是否需要运行Web服务器?如果我给浏览器一个本地文件的URL,那么Angular会工作吗?

S M*_*den 20 angularjs

我的意思是,我已经读过Angular允许使用模拟数据,因此不需要连接RESTFul api.我可以想到一个用例,用户体验设计师只需看看化妆品,就不需要连接到Web服务器.我也可以考虑其他用例.

因此,Angular的工作是给浏览器一个本地文件的URL,如C:\ temp\index.html,js文件位于c:\ temp或者说c:\ temp\js.

所以实际上,我试过了,这里是一个应用程序文件(我知道应该分开)

<html ng-app="myNoteApp">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>

<div ng-controller="myNoteCtrl">

<h2>My Note</h2>

<p><textarea ng-model="message" cols="40" rows="10"></textarea></p>

<p>
<button ng-click="save()">Save</button>
<button ng-click="clear()">Clear</button>
</p>

<p>Number of characters left: <span ng-bind="left()"></span></p>

</div>

<script >
// was in separate file but pasted in for demo purposes
var app = angular.module("myNoteApp", []);

</script>
<script >
// was in separate file but pasted in for demo purposes
app.controller("myNoteCtrl", function($scope) {
    $scope.message = "";
    $scope.left  = function() {return 100 - $scope.message.length;};
    $scope.clear = function() {$scope.message = "";};
    $scope.save  = function() {alert("Note Saved:" + $scope.message);};
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果是,它在Chrome和Firefox中都没有问题,IE最初会阻止内容但是可以允许它运行.

感谢回复.我可能会删除这个问题,因为人们对它进行了贬低.我实际上认为这是有用的发现,但嘿社区最了解.

Jak*_*ke_ 11

您不能只通过本地计算机上的文件路径访问角度应用程序,因为您将获得跨源域错误.

解决方案是安装http-server(需要安装node.js).这允许您在机器本地创建一个http服务器,并允许您访问Angular应用程序,就好像它是在线托管以进行开发和测试一样.

  • 只要您不需要AJAX请求(路由,ng-includes,templateUrls等),您实际上可以运行AngularJS应用程序 (4认同)

Jam*_*ard 6

是的,您可以运行本地文件,但如果您需要服务器上的数据,浏览器应阻止它,具体取决于您运行的浏览器的版本和类型.

以下是PhoneCat教程应用程序:运行开发Web服务器下的官方Angularjs教程解释

虽然Angular应用程序纯粹是客户端代码,并且可以直接从文件系统在Web浏览器中打开它们,但最好从HTTP Web服务器提供它们.特别是,出于安全原因,如果直接从文件系统加载页面,大多数现代浏览器将不允许JavaScript发出服务器请求.


小智 1

因此,我这样做的方法是创建一个临时服务并加载它,而不是从 url/文件加载。

例子:

//tempUser.js
angular.module("app").constant("tempUser", {
    firstname : "Joe",
    lastname : "Smith"
});

//userService.js
angular.module("app").factory("userService", function ($q, tempUser) {
    return {
        load : load
    };

    function load(id) {
        //TODO: finish impl
        return $q.when(tempUser);
    }
});
Run Code Online (Sandbox Code Playgroud)

这样控制器仍然可以像从 Web 服务加载一样工作。

angular.module("app").controller("UserDetailCtrl", function (userService) {
    userService.load().then(function (user) {
        $scope.user = user;
    });
});
Run Code Online (Sandbox Code Playgroud)