我是AngularJS的新手,我想了解如何正确地将模型与 Controller 分开。到目前为止,我一直都在使用 Controller 内部的模型。例如:
angular.module("app").controller("customerController", ["Customer", "$scope", "$routeParams",
function (Customer, $scope, $routeParams){
$scope.customer = Customer.find({ID:$routeParams.ID});
}]);
此函数从数据库中检索客户并将该客户暴露给 View 。但是我想走得更远:例如,我可能需要封装某些东西或创建一些有用的函数来从数据库中包含的行数据中抽象出来。就像是:
customer.getName = function(){
//return customer_name + customer_surname
};
customer.save = function(){
//save the customer in the database after some modifies
};
我想为客户创建一个模型,并在许多 Controller 中重用该模型。也许然后我可以为客户创建一个列表,该列表具有从数据库或其他内容中检索所有客户的方法。
总之,我希望有一个模型可以反射(reflect)具有属性和方法进行交互的数据库实体(例如上述客户)。也许是创建客户或客户列表的工厂。如何在AngularJS中完成这样的任务?我想从您这里收到一些建议。一个简单的例子将是非常有用的,或者是一个理论上的答案,可以帮助我理解解决Angular中类似问题的正确方法。谢谢,祝您工作顺利。
最佳答案
Angular JS使您能够在发生模型更改或事件时自动更新 View 。
贴吧!
它通过使用$ watches来做到这一点,$ watches是一种Global Scope Java脚本对象,并在整个 Angular js Web应用程序的生命周期中都保留在主内存中。
1,在将任何东西放到$ scope之前,请考虑数据的大小,因为您附加到它的每个数据对象都会对$ watch +1。当您从数据库中读取数据时,您可能会有100多个行且列数大于4,并且相信我,它将吞噬客户端的处理。请务必考虑数据集的大小,并阅读有关大型数据集与 Angular 相关的性能问题
2.为您的数据库实体提供模型,我建议您使用简单的javascript类,即不要将所有内容放在$ scope上(这将避免不必要的监视!)http://www.phpied.com/3-ways-to-define-a-javascript-class/
3.您希望在用户更改值时触发事件。为此,我建议您使用ng-repeat渲染数组中的数据,然后使用$ index获取完成更改的行号,然后在ng-click中将其传递给ie,然后使用actionIdentifier来区分您想要的各种 Activity
ng-click="someFunc($index,actionIdentifier)"