可以将前端js框架用于非单页应用程序吗?

时间:2014-01-27 13:11:33

标签: javascript angularjs backbone.js knockout.js

有人告诉我,骨干,angularjs,knockout等前端框架仅适用于单页应用,因为必须根据哈希参数定义路由,这些框架触发适当的控制器/模态/视图。

我的问题是这些前端框架是否也可用于非单页应用程序?我们假设我有这三页:

  • 的index.html
  • about.html
  • contact.html

我为上面文件中包含的app.js中的路由编写了代码。那么这些框架是否能够找出我们所在的页面并自动触发适当的控制器(以及其他带模态的东西,加载适当的视图),而不像基于哈希的单页应用程序?如果可能的话,有人可以给出一个简单的例子,说明如何使用上述框架中的任何一个来定义上述三个页面的路线(在这种情况下不受欢迎)?

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

正如评论中所提到的,没有什么能阻止您在传统的每页往返Web应用程序中使用任何这些框架。话虽如此,你应该选择合适的工具。

声明:

我在实际应用程序中广泛使用了Angular和Knockout。我只使用了一点主干,但我更喜欢 Angular和Knockout的声明式风格而不是主干的主题风格。

Backbone和Angular实际上是为构建单页面应用程序而设计和优化的。但是,它们之间有许多灰色阴影。您可以加载 “客户” 页面并在其中定义一些路线,但是当您导航到 “管理员” 可能是一个总页面刷新,你可以在那里定义多个路由。

Knockout不是SPA框架。它没有路由器,因此不处理视图的侧面加载。你使用像Sammy.js这样的东西来实现你想要的路由。

如果您不构建SPA,请不要使用SPA框架。

如果我是你,我会亲自去Knockout,因为你不需要路由器。

但是,如果您计划最终将其构建到SPA或混合应用程序,那么请使用AngularBackboneEmber等框架。

答案 1 :(得分:1)

完全有可能这样做。

唯一的区别是每次更改页面时都会重新创建ViewModel,并且会重新加载数据,但根据应用程序的设计,这与您在单页应用程序中的操作没有太大差别。

答案 2 :(得分:1)

在Angular中,您可以执行以下操作来实现此目的:

<html>
   <head>
     <title>index.html</title>
   </head>
   <body ng-app="myApp" ng-controller="indexController">
     <h2>{{title}}</h2>

     <script type="text/javascript">
        (function(app) {

            var indexController($scope) {
                $scope.title = "Index title!";
            };

            app.controller('indexController', ['$scope', indexController]);

        }(angular.module('myApp')));
     </script>    
   </body>
</html>

例如,淘汰赛并不是一个完整的SPA框架。如果您想要路由,您将不得不依赖第三方库,即sammy.js