javascript - AngularJS 不更新 View

标签 javascript angularjs json model-view-controller

我对 AngularJS 有疑问。如果我编辑 JSON 文件中的数据,它不会更新 View 。我也尝试过以这种方式做 "$scope.loadData = function() {}"但它没有改变任何东西!
之前感谢您的帮助。

HTML代码

<!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 代码

function TimetableCtrl($scope, $http) {
    $http.get('js/items.json')
        .success(function(data) {$scope.sessions = data.sessions;})
        .error(function(data) {console.log('error');});
}

JSON 数据

{
    "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!"
        }
    ]
}

最佳答案

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

你可以做的事情:

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

例如,以 1 秒为间隔的简单轮询:

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);
        }
    });

});

关于javascript - AngularJS 不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674072/

相关文章:

angularjs - 带有 AngularJS ng-Repeat 的 Kendo PanelBar 在修改数据源时无法正确呈现

javascript - ng标签输入不允许在文本框中输入两次相同的文本

angularjs - 如何让键向上/向下指令在 Angularjs 中的列表上工作?

java - JSON-encode Java for PHP 中的对象数组和数组

javascript - 将 javascript 计算值传递到数据库是不好的做法吗?

javascript - 跨域 AJAX 请求返回字符串

java - 在recyclerView中获取json数据

javascript - 如何打印由 JSON 数据制成的表格?

javascript - 运行 fancybox-thumb 时隐藏其他图像

javascript - 显示选择的 jQuery Select2 问题