首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS不更新视图

AngularJS不更新视图
EN

Stack Overflow用户
提问于 2016-07-30 12:40:12
回答 3查看 733关注 0票数 3

我对AngularJS有个问题。如果我编辑JSON文件上的数据,它不会更新视图。我也尝试过以这种方式"$scope.loadData = function() {}“,但是它不会改变任何事情!

谢谢你之前的帮助。

HTML代码

代码语言:javascript
复制
<!doctype html>
    <html ng-app>
      <head>
        <title>JavaScript &amp; jQuery - Chapter 9: APIs - Angular with remote data</title>
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
        <script src="js/angular-external-data.js"></script>
        <link rel="stylesheet" href="css/c09.css">
      </head>
      <body>
        <header><h1>THE MAKER BUS</h1></header>
        <h2>Session Times</h2>
        <div class="third"><img src="img/toys1.jpg" alt="Circuit boards" /></div>
        <div class="two-thirds" id="timetable">
          <table ng-controller="TimetableCtrl">
            <tr><th>time</th><th>title</th><th>detail</th></tr>
            <tr ng-repeat="session in sessions">
              <td>{{ session.time }}</td>
              <td>{{ session.title }}</td>
              <td>{{ session.detail }}</td>
            </tr>
          </table>
        </div>
      </body>
    </html>

AngularJS码

代码语言:javascript
复制
function TimetableCtrl($scope, $http) {
    $http.get('js/items.json')
        .success(function(data) {$scope.sessions = data.sessions;})
        .error(function(data) {console.log('error');});
}

JSON数据

代码语言:javascript
复制
{
    "sessions": [
       {
            "time": "09.00",
            "title": "Intro to 3D Modeling",
            "detail": "Come learn how to create 3D models of parts you can then make on our bus! You'll get to know the same 3D modeling software that is used worldwide in professional settings like engineering, product design, and more. Develop and test ideas in a fun and informative session hosted by Bella Stone, professional roboticist."
        },
        {
            "time": "10.00",
            "title": "Circuit Hacking",
            "detail": "Head to the Electro-Tent for a free introductory soldering lesson. There will be electronics kits on hand for those who wish to make things, and experienced hackers and engineers around to answer all your questions. Feel free to bring your own projects to work on if you have them! Run by Luke Seyfort, elite hacker and The Maker Bus' official lab monitor."
        },
        {
            "time": "11.30",
            "title": "Arduino Antics",
            "detail": "Learn how to program and use an Arduino! This easy-to-learn open source microcontroller board takes all sorts of sensor inputs, follows user-generated programs, and outputs data and power. Arduinos are commonly used in robotics, mechatronics, and all manners of electronics projects around the world. Taught by Elsie Denney, professional software developer with a long previous career as a technical artist in the video game industry, electronics enthusiast and instructor."
        },
        {
            "time": "13.00",
            "title": "The Printed Lunch",
            "detail": "Discover and taste the brave new world of the printed lunch. You will not only get to see how 3D printers are being used to recreate traditional foods, but also see entirely new types of treats being made. Will you be the visitor that we create a chocolate model of?"
        },
        {
            "time": "14.00",
            "title": "Droning On",
            "detail": "We have ways of keeping you awake after lunch. This session will be policed by a set of quadcopters remotely controlled via many different types of sensor hooked up to an Arduino board. Snoozing could result in a visit from the drones..."
        },
        {
            "time": "15.00",
            "title": "Brain Hacking",
            "detail": "With advances in affordable electro-encephalography, measuring brain waves is something accessible to everyone. Celebrated neuroscientist Cino Rylands will be inviting the audience to participate in creating a symphony of the mind."
        },
        {
            "time": "16.30",
            "title": "Make The Future",
            "detail": "See how the next generation of makers can be inspired to create a new future for themselves. Learn all about the different tools we can use to enlighten and encourage others to get on board the bus!"
        }
    ]
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-30 12:51:06

如果您更改服务器上的文件,您的客户端将不知道该更改。

你能做的事:

  • 使用websocket通知客户端他需要重新加载json文件(您需要服务器端的支持)
  • 使用轮询按间隔对文件进行采样并重新加载它(更简单)

例如,以1秒间隔进行简单轮询:

代码语言:javascript
复制
var app = angular.module('myApp');

app.controller('TimetableCtrl', function($scope, $http, $timeout) {

    var nextPolling;
    var pollingInterval = 1000; // 1 second
    var _polling = function ()
    {
        $http.get('js/items.json')
            .success(function(data) {$scope.sessions = data.sessions;})
            .error(function(data) {console.log('error');})
            .finally(function(){ nextPolling = $timeout(_polling, pollingInterval); });
    };

    _polling();

    $scope.$on('$destroy', function (){
        if (nextPolling){
            $timeout.cancel(nextPolling);
        }
    });

});
票数 2
EN

Stack Overflow用户

发布于 2016-07-30 12:48:11

这是一个承诺,所以它在返回后设置$scope.sessions。

像这样改变,

代码语言:javascript
复制
app.controller("TimetableCtrl", ["$scope","$http",
    function($scope, $http) {
             $http.get('test.json').then(function (response){
                $scope.sessions = response.data.sessions;
        });

}]);

工作App

票数 1
EN

Stack Overflow用户

发布于 2016-07-30 12:59:24

您使用的是$scope,正如John在文章中所描述的,这是不值得推荐的。将其更改为使用控制器实例,因此代码如下所示:

Javascript:

代码语言:javascript
复制
function TimetableCtrl($scope, $http) {
      var vm = this;
      $http.get('js/items.json')
        .success(function(data) {vm.sessions = data.sessions;})
        .error(function(data) {console.log('error');});
}

HTML:

代码语言:javascript
复制
<table ng-controller="TimetableCtrl as vm">
        <tr><th>time</th><th>title</th><th>detail</th></tr>
        <tr ng-repeat="session in vm.sessions">
          <td>{{ session.time }}</td>
          <td>{{ session.title }}</td>
          <td>{{ session.detail }}</td>
        </tr>
      </table>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38674072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档