【问题标题】:Refresh AngularJS ng-view刷新 AngularJS ng-view
【发布时间】:2014-06-02 18:43:00
【问题描述】:

我有一个作为前端 MVC 运行 Angular 的应用程序,但后端代码并不是专门为它设计的。我有一个页面,其中列出了您可以使用搜索选项过滤的内容。所有的搜索功能都有效,因为如果我点击搜索,手动重新加载页面,我期望的数据就会返回。我的问题是如何让 ng-view 重新加载作为“模板”的 php 文件。我知道这不是单页应用程序的最佳实践,所以请放过我。我的控制器在搜索表单的 ng-submit 上是否可以说:“嘿,ng-view,重新加载您的模板。”这似乎是一件相对微不足道的事情,但文档帮助不大。

忘了提到我尝试使用 $route.reload(),但这只是重新加载页面,因为它在添加搜索参数之前出现。我可以使用 $window.location.reload(),但这违背了单页应用程序的目的。

我运行了一个 ajax 函数来更新会话中的搜索变量,(这是一种愚蠢的搜索方式,但是所有者写了它,我不会踩到他的脚趾告诉他这是错误的) .此时,如果您通过 F5 重新加载页面,它会加载预期的数据,但是当我运行 $route.reload() 时,它不会再次运行 php 并获得更新的结果,它会重新加载视图,就好像php 从未改变。

agencyMatrix.controller('singlePage', function($scope, $route){
    $scope.reset = function(targetUrl){
        $.ajax({
            type: "GET",
            url: targetUrl,
            success: function() {
                $route.reload();
            }
        });
    }
});

【问题讨论】:

  • 我不明白。你能提供一些代码吗?
  • 您是否尝试过清除 $templateCache?可能类似于 $templateCache.remove(pathInConfig) 或 $templateCache.removeAll()。 Angular 试图通过在页面上将模板存储在 $templateCache 中来提高效率,这样它就不必每次都访问服务器。刷新页面会有效地清除 $templateCache(以及在 javascript 中初始化的所有其他内容)。
  • 我正在运行开发人员工具以防止缓存,但我会尝试这样做。
  • 浏览器中的缓存和什么角度缓存是不同的概念。 From Angular:第一次使用模板时,将其加载到模板缓存中以便快速检索。我相信将 $templateCache 注入您的控制器,然后在您的 $.ajax 调用之前删除模板将允许它再次从 PHP 中获取。
  • 我该死的,帕特里克,那成功了。这就是我假设如果 chrome 的缓存偏离角度也不会缓存的假设。把它作为一个答案,我很乐意接受。

标签: javascript php angularjs


【解决方案1】:

我在 php 后端使用了 angular。

在我的设计中,对于每个视图页面,都有 view.php 。在这个 php 文件中,有页面的 json 数据和页面设置的变量,如模板 html 页面的目录。

我的 view.php 文件:

<?php $appName = "flySearhPageApp"; ?>
<?php define("PAGE_NAME",$pageName )?> 
<?php
<div ng-view></div>

<script type="text/javascript">
   var APP_PAGE_NAME = "memberActivateStatu";
   var response  = {};
   response.memberdata = JSON.parse('<?php echo json_encode(isset($memberInfo) ? $memberInfo : ""); ?>');
   response.errorCode = '<?php echo (isset($errorCode) ? $errorCode :""); ?>';
   response.errorDesc = '<?php echo (isset($errorDesc) ? $errorDesc :""); ?>';
</script>

?>

和footer.php

 <script src="<?php echo base_url();?>online_reservation_public/app/js/<?php echo PAGE_NAME; ?>/app.js"></script>
      <script src="<?php echo base_url();?>online_reservation_public/app/js/<?php echo PAGE_NAME; ?>/controllers.js"></script> 

还有我的 app.js

angular.module(APP_NAME, [
  'ngRoute',
   APP_NAME+'.filters',
   APP_NAME+'.services',
   APP_NAME+'.directives',
   APP_NAME+'.commonControllers',
   APP_NAME+'.controllers'

]).
config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/',{templateUrl:BASE_URL+PUBLIC_DIRECTORY+"/partials/"+APP_PAGE_NAME+'/index.html',controller:APP_NAME+'Controller'});

    }]).config(['$locationProvider', function ($locationProvider) {

}]);

【讨论】:

  • 我知道如何做我想做的事情,我正在从头开始构建应用程序。这不是我在这里做的。我必须按摩我的角度控制器以适应底层 php。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 2014-09-29
  • 2019-06-14
  • 1970-01-01
  • 2016-03-26
相关资源
最近更新 更多