小丸子总结angularjs的一些问题
在公司回来,明天就要开启奔波模式啦。 借此缓和的机会,总结一下在公司自学angular之后,可能会面临的一些问题。 1.angularjs中的作用域例子: <div ng-controller="TestCtrl"> <p>{{name}}</p> <div ng-if="show"> <input type="text" ng-model="name"> </div> </div> <script> function TestCtrl($scope){ $scope.show = true; $scope.name = 'htf'; } </script>
在这段代码中,不管 我们知道,js有基本数据类型和引用数据类型之分。 当我们传递一个基本类型时,js采用的是值传递,b=a,就是把栈里存放的a数值复制到b里。 所以,我们在 <div ng-controller="OuterCtrl"> <p>{{x}}</p> <div ng-controller="InnerCtrl"> <input type="text" ng-model="x"> </div> </div> <script> function OuterCtrl($scope){ $scope.data = {}; $scope.data.x = 'hello'; } function InnerCtrl($scope){ } </script>
看到别的大大这么说:(可能是假的,回公司证实一下) 关于javascript作用域,变量类型以及内存的问题 2.angularjs页面中不可以调用其他控制器的方法甚至js原生方法<p>{{parseInt(55.66)}}<p>
会发现,什么也没有显示。 但如果在 $scope 中添加了这个函数: $scope.parseInt = function(x){
return parseInt(x);
}
就可以显示了。 angularjs是MVC架构的。题目的想法完全与MVC相违背。我们需要的方法我们可以创建服务和指令,注入到我们这个controller里,在这个controller中与页面交互。 (ps:事实上我怎么感觉vue.js的代码结构更加清晰更加简单,MVVM的强大。。。) 3.angularjs中的过滤器http://www.tuicool.com/articles/vmmeQvj 4.factory、service 和 provider 是什么关系?service调用的factory,factory调用的provider。 factory 把 service 的方法和数据放在一个对象里,并返回这个对象 app.factory('FooService',function(){
return {
target: 'factory',sayHello: function(){
return 'hello ' + this.target;
}
}
});
service 通过构造函数方式创建 service,返回一个实例化对象 app.service('FooService',function(){
var self = this;
this.target = 'service';
this.sayHello = function(){
return 'hello ' + self.target;
}
});
provider 创建一个可通过 config 配置的 service,$get 中返回的,就是用 factory 创建 service 的内容 app.provider('FooService',function(){
this.configData = 'init data';
this.setConfigData = function(data){
if(data){
this.configData = data;
}
}
this.$get = function(){
var self = this;
return {
target: 'provider',sayHello: function(){
return self.configData + ' hello ' + this.target;
}
}
}
});
// 此处注入的是 FooService 的 provider
app.config(function(FooServiceProvider){
FooServiceProvider.setConfigData('config data');
});
5. angular 的数据绑定采用什么机制?详述原理脏检查机制。 原理就是,Angular 在 scope 模型上设置了一个 监听队列,用来监听数据变化并更新 view 。每次绑定一个东西到 view 上时 AngularJS 就会往
$digest 循环的上限是 10 次(超过 10次后抛出一个异常,防止无限循环)。 6. AngularJS 中 Controller 之间的通信在平时的业务实现中,发现有时候后台接受的User数据会在不太能够的controller中用到。 然而我再去发送一次AJAX请求?明明数据我之前已经收到了呀。 这时候我就要通过controller之间数据通信来解决。
7.一个 angular 应用应当如何良好地分层?我感觉我们的项目分层就不是太好,有些混乱。
尽量让 controller 这一层很薄。提取共用的逻辑到 service 中 (比如后台数据的请求,数据的共享和缓存,基于事件的模块间通信等),提取共用的界面操作到 directive 中(比如将日期选择、分页等封装成组件等),提取共用的格式化操作到 filter 中等等。 8. 依赖注入服务,原理服务是单例模式的。 注入在任何controller里可以实现通信。 原理 angularjs通过传入参数的参数名,把它tostring,来获得对应的字符串,然后使用正则表达式,解析出其中的依赖项,再去以来映射中获取那个依赖,实例化,传入。 问题 使用的代码压缩会出现问题怎么解决呢?变成字符串传输。 myApp.controller('myCtrl',['$scope','$http',function($scope,$http){
...
}])
或显式inject myApp.controller('myCtrl',myCtrl);
function myCtrl = ($scope,$http){
...
}
myCtrl.$inject = ['$scope','$http'];
9.angular 路由了解 angular内置的 ngRoute 和插件 ui.router。 项目使用到的是ui.router。 ngRoute是基于url的,ui-router是基于state的(大大说的,具体实现的区别是什么呢??没有研究过) ui.router更加强大,可以多级路由嵌套。这个在前面的博文中总结过。 使用 ui.router 能够定义有明确父子关系的路由,并通过 ui-view 指令将子路由模版插入到父路由模板的 ngRoute var app = angular.module('ngRouteApp',['ngRoute']);
app.config(function($routeProvider){
$routeProvider
.when('/main',{
templateUrl: "main.html",controller: 'MainCtrl'
})
.otherwise({ redirectTo: '/tabs' });
ui.router var app = angular.module("uiRouteApp",["ui.router"]);
app.config(function($urlRouterProvider,$stateProvider){
$urlRouterProvider.otherwise("/index");
$stateProvider
.state("Main",{
url: "/main",templateUrl: "main.html",controller: 'MainCtrl'
})
10.angular 的缺点有哪些?
11.如何看待 angular 1.2 中引入的 controller as 语法?我想说我接触的项目,很多controller都是用了这种语法,我们在controller中把变量给this赋值,我们在视图中就可以访问。再也不需要绑定到 这是什么原理呢? 从源码实现上来看,controllerAs 语法只是把 controller 这个对象的实例用 as 别名在 $scope 上创建了一个属性。 if (directive.controllerAs) {
locals.$scope[directive.controllerAs] = controllerInstance;
}
原来是这样!这不还是使用了 只是这样就避免了 使用 controllerAs 会遇到的一个问题是,因为没有注入 解决了一个坑又出来了一堆新坑。掀桌。 12.angularjs中$apply和$digest区别
所以ajax请求或者timeout之后当然选择调用$apply了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- scala – 为什么要重新实现lazy?
- angular – Zone.assertZonePatched不是一个函数
- 对照Angular/jQueryUI/Extjs:没有一个框架是万能的
- 【Loadrunner】通过soap_request手工编写webservice协议请求
- 在bootstrap modal dialog中使用webupload,打不开对话框问
- 如果docker使用虚拟机在Mac上运行,那么它比流浪汉有什么优势
- angular – 如何在打字稿中使用collections.js?
- 从无到有,WebService Apache Axis2初步实践
- regex – bash:oneliner将输出中的十六进制数转换为小数
- Bootstrap3基础 栅格系统 col-md-push/pull 向左、右的浮动