更新模型并将更新操作与 UI 绑定

2024-01-02

我目前已经使用 AngularJS 开发了一个内容表,该表将基于 Angular 服务“模型”进行填充,该模型调用 Web 服务并返回列表,并使用 ng-repeat 并创建一个表及其所有内容。

目前一切正常,但我有一个小问题。在表的一部分,我们输出一个操作按钮,单击该按钮会调用更新当前记录的 Web 服务。我试图使记录数据自动更新,但我必须刷新页面才能看到更改。

这是我的代码

我的应用程序.js

angular.module('my_vehicles', ['vehicleServices', 'AccountsDirectives']);

服务.js

'use strict';

angular.module('vehicleServices', ['ngResource']).
    factory('Car', function($resource) {
        return $resource('/vehicle/api/car.json/:id', {},
            {
                query:   {method:'GET',     isArray:false},
                delete:  {method:'DELETE',  isArray:false},
                update:  {method:'PUT',     isArray:false}
            }
        );
});

控制器.js

'use strict';

function MyVehicleController($scope, Car) {

    var init = function() {
        $scope.page_has_next = true;
        $scope.cars = [];
        $scope.page = 1;
    };

    // initialize values
    init();


    Car.query({my_vehicle: true},
        // success
        function(data) {
            $scope.page_has_next = data.has_next;
            $scope.cars = data.objects;
        },
        // error
        function(data) {

        }
    );


    $scope.mark_sold = function(id, index) {
        Car.update({
            id      : id,
            status  : 'S'
        },
        function(data) {

        });
    }

    $scope.delete = function(id, index) {
        Car.delete(
            {id: id},
            // on success
            function() {
                // remove the element from cars array and it will be
                // automatically updated by ng-repeat
                $scope.cars.splice(index, 1);
                $scope.loadMore(1);
            }
        );
    }

    $scope.is_total_zero = function() {
        return !!($scope.cars.length)
        //return $scope.cars.length > 0 ? true : false
    }


    $scope.loadMore = function(limit) {
        if($scope.page_has_next) {
            $scope.$broadcast('loading_started');
            console.log(limit);
            Car.query({my_vehicle: true, page: $scope.page, limit: limit},
                // success
                function(data) {
                    $scope.page_has_next = data.has_next;
                    $scope.cars = $scope.cars.concat(angular.fromJson(data.objects));
                    $scope.page++;
                    $scope.$broadcast('loading_ended');
                },
                // error
                function() {
                    $scope.page_has_next = false;
                    $scope.$broadcast('loading_ended');
                }
            );
        }
    }


    $scope.$on('loading_started', function() {
        $scope.state = 'loading';
    });

    $scope.$on('loading_ended', function() {
        $scope.state = 'ready';
    });


}

最后是我的 html 代码

                    <tr ng-repeat="car in cars">
                        <td><a href="{% ng car.get_absolute_url %}">{% ng car._get_model_display.make_display %} {% ng car._get_model_display.model_display %} {% ng car._get_model_display.trim_display %}</a></td>
                        <td>{% ng car.created_at_format %}</td>
                        <td>{% ng car.view_count %}</td>
                        <td ng-model="car.status_label">{% ng car.status_label %}</td>
                        <td>
                            <div class="btn-group">
                                <button ng-disabled="car.status == 'S' || car.status == 'P'" ng-model="edit" class="btn btn-mini edit-btn">{% trans 'Edit' %}</button>
                                <button ng-disabled="car.status == 'S'" ng-click="delete(car.id, $index)" class="btn btn-mini delete-btn">{% trans 'Delete' %}</button>
                                <button ng-disabled="car.status == 'S' || car.status == 'P'" ng-click="mark_sold(car.id, $index)" class="btn btn-mini edit-btn">{% trans 'Mark as sold' %}</button>
                            </div>
                            </td>
                        </tr>

P.S {% ng XXX %} 正在输出 {{ XXX }},我使用上述语法,因为 django 模板引擎不允许我使用 {{}} 所以我开发了一个可以输出 {{}} 的模板标签。 。

如前所述,我的问题是每次我调用“标记为已售出”时,它都会调用 cars.update() 但不会更新显示的记录,必须刷新才能看到更改。知道我该如何解决这个问题吗?


据我了解您的代码,您只更新数据库而不更新汽车模型($scope.cars),因此更改仅反映在数据库中,而不反映在 AngularJS 应用程序中。

也许可以尝试以下方法:

$scope.mark_sold = function(id, index) {
    Car.update({
        id      : id,
        status  : 'S'
    },
    function(data) {
        $scope.cars[id].status = 'S';
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更新模型并将更新操作与 UI 绑定 的相关文章

  • 用角度js中的字母过滤列表

    我在表格中显示了一个列表 我需要使用名称的第一个字母来过滤结果 在列表上方我有一个字母 A B C D 等等 单击后 字母列表将按名字过滤 例如 列表详细信息是Apple Boy Bridge点击后A Apple将显示 我必须过滤国家名称以
  • 带有绝对路径的角度js templateUrl

    在带有 url 的视频观看页面上 观看 video id 我有一个 ng 应用程序 该指令如下所示 app directive myApp function return restrict E templateUrl ng template
  • AngularJS 中的非单例服务

    AngularJS 在其文档中明确指出服务是单例 AngularJS services are singletons 违反直觉的是 module factory还返回一个 Singleton 实例 鉴于非单例服务有很多用例 实现工厂方法以返
  • 将安全的 Grafana 嵌入到 Web 应用程序中

    我想使用 AngularJS 将 Grafana 嵌入到我的 Web 应用程序中 目标是 当用户使用我的应用程序时 她应该能够单击按钮并加载 Grafana UI 就其本身而言 这是一项简单的任务 为此 我使用 apache 代理 Graf
  • 角度 ui 路由器的动态参数

    我想知道在更改状态并发送请求以从后端获取模板时如何包含参数 这是我的应用程序 angular module questionnaireApp ngAnimate ui router ui bootstrap config stateProv
  • 如何在 Angular 中使用 ng-options 过滤选择?

    我编写了以下 Angular 应用程序的概念验证 该应用程序允许人们投票选举美国总统
  • 在 AngularJS 控制器之间共享数据,但共享数据来自 Ajax 调用

    我已经弄清楚如何在下面的示例中使用共享服务在两个 AngularJS 控制器之间共享数据 运行中fiddle http jsfiddle net antelopelovefan pPKzW 1 var app angular module
  • 使用最新的不稳定分支生成 Angularjs 应用程序?

    刚开始使用 Yeoman 并喜欢它 但是 我正在构建一个依赖于一些 Angular 1 1 x 功能的应用程序 ng trim and ng animate 并且 Angular generator 使用最新的稳定分支作为默认分支 但不包含
  • Angular JS 在调用新的 $http 之前取消 $http 调用

    在 Angular JS 1 1 5 中 您可以取消之前启动的 http 调用 这两个link1 https stackoverflow com questions 16962232 in angularjs how to stop ong
  • 如何删除 ng-repeat 的默认顺序

    如何停止动态表数据的 ng repeat 内部的默认排序 目前我收到以下订单 地址 客户 ID 姓名 但我想要的是以下顺序 客户 ID 名称 地址 任何帮助我将不胜感激 JS app controller MyController func
  • 单元测试依赖注入

    我对茉莉花和业力是全新的 我相信我的环境设置正确 并且我能够运行非常基本的单元测试 但是一旦我尝试实例化控制器 我就会收到未知提供程序错误 并且我不确定如何调试它 我需要传入 stateProvider 依赖项吗 我在角种子示例中没有看到这
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 在角度控制器中监听文档事件

    如何捕获角度控制器中的事件 我有文档级事件 所以我需要在角度控制器中捕获事件 这可能吗 Update 我有独立的 js 文件来处理来自相机的一些操作 document addEventListener myCameraEvent handl
  • CORS 在 jquery 中工作正常,但在 angularjs 中不行

    我的服务器端是php mysql 我正在另一个域的 Web 服务中进行 Ajax 调用 其中启用了 的访问控制 var postUrl http logical brains com elance clone test login php
  • Angular UI 模式的范围问题

    我无法理解 使用角度 UI 模式的范围 虽然这里不是很明显 但我已经正确设置了模块和所有内容 据我所知 但这些代码示例尤其是我发现错误的地方 index html 其中重要部分 div class btn group div
  • 如何清除单个函数中的所有 AngularJS $scope 和 $rootScope 值?

    我需要清除所有 scope执行某些操作时的值 例如 如果我点击 Signout 按钮重定向到 signin 页面 然后所有 scope or rootScope应清除会话中的值 我怎样才能实现这个目标 您可以执行以下操作 rootScope
  • 在 Angular 中让多个调用等待同一个 Promise

    我在一个页面上有多个使用相同服务的控制器 为了举例 我们将服务称为 USER 第一次调用 USER getUser 时 它会发出 http 请求来获取有关用户的数据 调用完成后 它将数据存储在 USER data 中 如果再次调用 USER
  • $resource.query 返回分割字符串(字符数组)而不是字符串

    我正在使用像下面这样的 Angular resource angular module app factory data function resource var Con resource api data update method P
  • Protractor+AngularJS+Jasmine - 测试按住项目

    AngularJS 和 Protractor 非常新 但我认为到目前为止我正在朝着正确的方向前进 我的网站有一个项目列表 当您单击该项目并按住 X 秒时 它会打开一个模式窗口 我如何在 Protractor Jasmine 中模拟这种行为
  • 如何在 angular-ui 中动态禁用 ui-sortable 指令

    我正在使用 Angular ui 使用 ui sortable 指令进行排序 是否可以根据范围状态动态启用 禁用可排序功能 因此 我需要一个按钮来更改范围属性的状态 并且根据此属性可排序是否应该工作 角度指令支持观察可排序选项何时发生变化

随机推荐

  • Julia - 如何通过 WebSocket 订阅

    我想使用 Julia 使用 Websockets 订阅一些数据源 例如 从linux终端 我可以成功获取如下数据 wscat c wss www bitmex com realtime op subscribe args orderBook
  • CDI 事务管理:@Transactional 如何工作?

    在会话范围内有一个简单的 CDI bean 并注入了实体管理器 Named myBean SessionScoped public class MyBean implements Serializable private static fi
  • Vue模板如何禁止控制台登录?

    起源 log Vue prototype log console log 禁止场所
  • 在 Haskell 中从 Excel 读取数据

    我想从 xls 文件获取数据 而无需手动打开 Excel 一种可能性是使用 COM 自动化 有com 1 2 3 http hackage haskell org package com 1 2 3 and hdirect http hac
  • PHP比较二维数组

    我想知道如何比较两个二维数组的值 第一个数组 Array 1 0 gt Array 0 gt a 1 gt Array 0 gt b 2 gt Array 0 gt c 第二个 Array 2 0 gt Array 0 gt a 1 gt
  • 并非所有实例都在 Azure 应用服务中运行

    我正在使用 Azure 应用服务 它托管使用以下命令从事件中心读取数据的应用程序EventProcessorHost 我分配了 6 个实例 手动缩放 来运行 我检查了指标 CPU Time 在App Service中发现只有5个实例正在运行
  • JSON.NET Visual Studio 2008 和 .NET 3.5 紧凑框架

    我可以在 Visual Studio 2008 中使用 JSON NET 和 NET 3 5 Compact Framework 吗 如何在 IDE 中安装 配置它 我在网上搜索过但找不到 我找到了这个Visual Studio 2008
  • Elmah:如何从错误报告中获取 JSON HTTP 请求正文

    我正在使用 Elmah 来记录异常 如果请求是基于表单的请求 即 Content Type application x www form urlencoded 则 Elmah 非常擅长记录请求主体 但对于基于 JSON 的请求 其中内容类型
  • std::shared_ptr 初始化:make_shared() vs shared_ptr(new Foo) [重复]

    这个问题在这里已经有答案了 有什么区别 std shared ptr
  • 使用 javascript 从 div 获取值:始终未定义[重复]

    这个问题在这里已经有答案了 当我从 div 获取值时遇到这个问题 function sync var n1 document getElementById editor value alert n1 var n2 document getE
  • Spring Data JPA 与远程 MySQL 服务器的 ssh 隧道

    我使用 Spring Data JPA 和 Hibernate 作为持久性提供程序 并结合远程 MySQL5 服务器来执行定期复制内部数据子集的作业 该作业 即石英调度的 Java 应用程序 每天运行一次 大约需要30秒完成同步 出于安全原
  • Django 内联表单集和选择字段生成太多数据库查询

    我有一个包含许多外键字段的模型 例如具有 类型 级别 颜色 强度 字段的模型产品 只是一个通用示例 然后 我有一个页面可以使用类型表单编辑给定类型的所有产品 并将产品作为内联表单集 并可以选择添加其他内联产品extra 10 我觉得很奇怪的
  • 如何对二进制 Thrift 文件进行逆向工程?

    我被要求处理一些序列化为二进制的文件 不幸的是不是文本 JSON Thrift http incubator apache org thrift 对象 但我无权访问创建这些文件的程序或程序员 所以我不知道它们的结构 字段顺序等 有没有办法使
  • python:如何将列表中的每个值与另一个列表中的所有值相乘

    EDIT2 我已经删除了其余的代码 这样我就不会破坏解决方案 感谢您的帮助 编辑 我包含了我的整个代码 我不想包含它 因为我不想破坏任何自己尝试这个问题的人的解决方案 但我需要帮助 所以就在这里 我通过执行以下操作手动完成此操作 但我希望它
  • 等号(=) 和 IN 与子查询的区别

    我有一个查询需要 20 秒才能执行 请按照我的查询操作 SELECT MATLIGA COD MAT FAMILIA FROM ORCAMENTOS dbo OR 1INSUMOS INSUMOS INNER JOIN ORCAMENTOS
  • SQLite3和多进程

    当多个进程访问同一个SQLite数据库文件时 如何保证正确性 首先 避免并发访问sqlite数据库文件 并发性是 sqlite 的弱点之一 如果您有高度并发的应用程序 请考虑使用其他数据库引擎 如果您无法避免并发或删除 sqlite 请包装
  • XPath 不适用于动态 HTML 文档

    注意 这个问题及其答案对于大多数 所有支持 XPath 的编程语言和库都有效 而不仅仅是 JavaScript 使用以下代码创建一个非常简单的 HTML 页面 实际代码加载远程页面 但我试图将您的注意力集中在这里的主要问题上 var dt
  • 无法识别的选择器发送到实例 UIViewController

    我不断收到错误 NSInvalidArgumentException 原因 UIViewController setPhotoCellName 无法识别的选择器发送到实例 当我进入准备segue调用时 目前我有 TabBarControll
  • 如何在 Grails 中外部化自定义约束?

    我想将自定义约束验证器闭包保留在属性的约束定义之外 因为这样更容易阅读和重用 但我做错了 我正在尝试这样做 class City String name static constraints name nullable false blan
  • 更新模型并将更新操作与 UI 绑定

    我目前已经使用 AngularJS 开发了一个内容表 该表将基于 Angular 服务 模型 进行填充 该模型调用 Web 服务并返回列表 并使用 ng repeat 并创建一个表及其所有内容 目前一切正常 但我有一个小问题 在表的一部分