- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
构建我的第一个 Angular 应用程序时,我不明白如何将代码拆分成更小的 block 。我只有一个长期运行的 Controller ,但如果我尝试将代码分成单独的部分( Controller 、服务等),突然间数据不再绑定(bind)到 View (即我更新数据,但变化是'显示在 View /浏览器中)。
即。我有一个连接到 api 的简单应用程序以获取“书籍”列表,然后显示列表,并允许用户使用分页导航,或获取单本书的更多详细信息,或更新书籍记录(编辑/删除)。
我想将这些功能拆分成单独的 Controller ,例如:
问题是我不知道如何设置它,因为如果我使用服务来存储/输出“书籍”模型或“消息”模型,当我通过其中一个 Controller 更新此数据时,更改不会自动更新 View (就像我更新链接到 Controller 的 $scope 变量一样)。
据我所知, View 中的 $scope 变量会自动更新,因为 ng-controller="MyCtrl"
绑定(bind)到一个区域。但这将如何与服务一起工作?您不使用 ng-service
标签,对吧...?
假设我让我的 searchController 调用 api,接收所有书籍的 json。我将其放入 booksService 进行存储。然后我的 booksController,它负责更新页面上所有书籍的 ListView ,必须加载这个 booksService 来获取新数据......但它如何知道数据已更新?我如何通过 booksController 链接来自 booksService 的数据,以在 View 中显示新结果?
此外,我将如何构建 booksService——如何让 searchController 传入新数据(以更新可用于模型的持久变量),然后如何让 booksController 加载进来那个新数据?我是否需要从 booksService 中创建一个调用以将新数据推送到 booksController,或者 booksController 是否应该调用以从 booksService 中拉取新数据(如果是这样,它如何知道何时应该进行拉取)?
此外,searchController 和 paginationController 将通过对同一 API 的匹配查询进行 GET 调用(唯一的区别是查询中的 $page 变量)。我应该使用“服务”(还是工厂?)来解耦 $http.get 请求?
最后,在文件夹/文件结构中构建所有这些 Controller /服务的最佳方式是什么?我应该将每个 block 分开到一个单独的 *.js 文件中吗?我应该使用 require.js 来导入文件吗?在这种情况下,它是网站的单个页面(网站上可能还有其他页面,如此页面)。如果我将代码拆分为单独的文件,我是否应该将每个网页的文件分组到一个文件夹中? (即,如果我添加“用户仪表板”页面,所有文件都将存储在与“搜索书籍”页面不同的文件夹中)。
抱歉,我知道我问了很多,但这确实可以帮助我了解正确构建 Angular 应用程序所涉及的概念。
最佳答案
以这种方式将所有 Controller 放入 controller.js 文件中。
angular.module('starter.controllers', [])
.controller('SearchCtrl', function($scope) {
//do your search stuff
})
.controller('BookCtrl',function($scope){
})
.controller('PaginationCtrl',function($scope){
})
.controller('MessagesCtrl',function($scope){
});
//in your services.js file
angular.module('starter.services', [])
/**
* A simple service that returns some data.
*/
.factory('Search', function() {
var somedata="from service";
return {
sample: function() {
return somedata;
}
}
)};
你可以像这样从任何 Controller 调用工厂服务
.controller('SearchCtrl', function($scope, Search) {
//get data from factory service
$scope.getdata=Search.sample();
})
也在你的指令文件中
/*
its route map for the application
all the page navigation are done here
common for the application
*/
angular.module('app',[
'ui.router'
])
.config(['$urlRouterProvider','$stateProvider',function($urlRouterProvider,$stateProvider){
$urlRouterProvider.otherwise('/');
$stateProvider
.state('home',{
url:'/',
templateUrl:'templates/home.html',
controller:'SearchCtrl'
})
.state('about',{
url:'/about',
templateUrl:'templates/about.html',
controller:'aboutCtrl'
})
}])
在你的home.html中你可以通过这种方式读取数据
<h2>{{$scope.getdata}}</h2>
查看此链接 (http://ionicframework.com/getting-started/) 并尝试模拟基于选项卡的应用程序工作的示例 tabs
应用程序。带有 angularjs 的 Ionicframework 更适合此类应用程序。
关于javascript - AngularJS:如何将长 Controller 拆分成模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955764/
我有一个如下所示的数据框: import pandas as pd d = {'decil': ['1. decil','1. decil','2. decil','2. decil','3. dec
我有一些数据想要添加到我的应用中...大约 650 个类别(包括名称 + ID 号),每个类别平均有 85 个项目(每个都有一个名称/ID 号)。 iPhone会支持这么大的plist吗?我想首先在
我目前正在使用 Python 从头开始实现决策树算法。我在实现树的分支时遇到了麻烦。在当前的实现中,我没有使用深度参数。 发生的情况是,要么分支结束得太快(如果我使用标志来防止无限递归),要么如果
我在 Stack 上发现了这个问题 - Measuring the distance between two coordinates in PHP 这个答案在很多方面似乎对我来说都是完美的,但我遇到了
我目前正在清理一个具有 2 个索引和 2.5 亿个事件行以及大约同样多(或更多)的死行的表。我从我的客户端计算机(笔记本电脑)向我的服务器发出命令 VACCUM FULL ANALYZE。在过去的 3
这一切都有点模糊,因为该计划是相当深入的,但坚持我,因为我会尽量解释它。我编写了一个程序,它接受一个.csv文件,并将其转换为MySQL数据库的INSERT INTO语句。例如: ID Numbe
我有一个地址示例:0x003533,它是一个字符串,但要使用它,我需要它是一个 LONG,但我不知道该怎么做:有人有解决方案吗? s 字符串:“0x003533”到长 0x003533 ?? 最佳答案
请保持友善 - 这是我的第一个问题。 =P 基本上作为一个暑期项目,我一直在研究 wikipedia page 上的数据结构列表。并尝试实现它们。上学期我参加了 C++ 类(class),发现它非常有
简单的问题。想知道长 IN 子句是否是一种代码味道?我真的不知道如何证明它。除了我认为的那样,我不知道为什么它会闻起来。 select name, code, capital, pop
我正在尝试基于 C# 中的种子生成一个数字。唯一的问题是种子太大而不能成为 int32。有什么方法可以像种子一样使用 long 吗? 是的,种子必须很长。 最佳答案 这是我移植的 Java.Util.
我一直想知道这个问题有一段时间了。在 CouchDB 中,我们有一些相当的日志 ID……例如: “000ab56cb24aef9b817ac98d55695c6a” 现在,如果我们正在搜索此项目并浏览
列的虚拟列 c和一个给定的值 x等于 1如果 c==x和 0 其他。通常,通过为列创建虚拟对象 c , 一排除一个值 x选择,因为最后一个虚拟列不添加任何信息 w.r.t.已经存在的虚拟列。 这是我如
使用 tarantool,为什么我要记录这些奇怪的消息: 2016-03-24 16:19:58.987 [5803] main/493623/http/XXX.XXX.XXX.XXX:57295 t
我显然是 GitHub 的新手,想确保在开始之前我做的事情是正确的。 我想创建一个新的存储库,它使用来自 2 个现有项目的复刻/克隆。现有项目不是我的。 假设我想使用的 repo 被称为来自开发人员“
我的应用程序名称长度为 17 个字符。当安装在设备上时,它看起来像应用程序...名称。有没有办法在多行上显示应用程序名称?请帮忙。 最佳答案 不,你不能。我认为 iPad 支持 15 个字符来完整显示
我必须编写一个程序来读取文件中的所有单词,并确定每个单词使用了多少次。我的任务是使用多线程来加快运行时间,但是单线程程序的运行速度比多线程程序快。我曾尝试研究此问题的解决方案,但很多解释只会让我更加困
假设我在给定的范围内有一个位置pos,这样: 0 = newRange*newRange : "Case not supported yet"; // Never happens in my code
我试图在 Java 中将 unix 时间四舍五入到该月的第一天,但没有成功。示例: 1314057600 (Tue, 23 Aug 2011 00:00:00 GMT) 至 1312156800
我们的项目有在 CVS 中从现有分支创建新分支的历史。几年后,这导致了每次发布时更改的文件上的这种情况: 新版本:1.145.4.11.2.20.2.6.2.20.2.1.2.11.2.3.2.4.4
我有以下数据框: DAYS7 <- c('Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday', 'Sunday') DAYS
我是一名优秀的程序员,十分优秀!