在本文中,我们将给您介绍关于angularjs–如何在收到两个或更多$scope事件后调用函数?的详细内容,并且为您解答angularjsscope原理的相关问题,此外,我们还将为您提供关于Angul
在本文中,我们将给您介绍关于angularjs – 如何在收到两个或更多$scope事件后调用函数?的详细内容,并且为您解答angularjs scope 原理的相关问题,此外,我们还将为您提供关于Angular 2 – 如何在兄弟组件中调用函数?、angularjs – Angular $scope.$digest vs $scope.$apply、angularjs – Angular $scope作为一个对象文字或多个$scope、angularjs – Angular Route – 加载时调用函数的知识。
本文目录一览:- angularjs – 如何在收到两个或更多$scope事件后调用函数?(angularjs scope 原理)
- Angular 2 – 如何在兄弟组件中调用函数?
- angularjs – Angular $scope.$digest vs $scope.$apply
- angularjs – Angular $scope作为一个对象文字或多个$scope
- angularjs – Angular Route – 加载时调用函数
angularjs – 如何在收到两个或更多$scope事件后调用函数?(angularjs scope 原理)
var a = false,b = false; $scope.$on("eventA",function(){ a = true; if (b) performTask(); }); $scope.$on("eventB",function(){ b = true; if (a) performTask(); }); var performTask = function() { /* do something... */ };
如果有三个或更多事件,这会变得更复杂.是否有设计模式来处理这些情况?
解决方法
var dfdATask= $q.defer(); var dfdbTask= $q.defer(); $scope.$on("eventA",function(){ // whatever this function does dfdATask.resolve(true);//or pass a value }); $scope.$on("eventB",function(){ //whatever this function does dfdbTask.resolve(true);//or pass a value }); $q.all([dfdATask.promise,dfdbTask.promise]).then(function(){ //be sure to pass in an array of promises //perform task })
Angular 2 – 如何在兄弟组件中调用函数?
< APP-主>< / APP-主> @H_301_5@app-controls包含需要在app-main组件中触发事件的按钮.是否有符合Angular 2风格指南的方式?
解决方法
如果< app-controls>有一个输出,当点击按钮时它会发出事件你可以这样做: @H_301_5@ @H_301_5@
<app-controls (buttonClicked)="main.doSomething($event)"></app-controls> <app-main #main></app-main>@H_301_5@或者您可以传递对@input()兄弟姐妹的引用;然后调用它上面的方法: @H_301_5@
<app-controls [sibling]="main"></app-controls> <app-main #main></app-main>
angularjs – Angular $scope.$digest vs $scope.$apply
setTimeout(function(){ $scope.$apply(function(){ $scope.name = 'Alice'; }); },3000);
但是通过使用
setTimeout(function(){ $scope.$digest(function(){ $scope.name = 'Alice'; }); },3000);
什么都没发生…
我以为他们做同样的事情.我错了什么?
两者之间的一个区别是如何调用它们. $digest()在没有任何参数的情况下被调用. $apply()接受一个在执行任何更新之前将执行的函数.
另一个区别是它们的影响. $digest()将更新当前范围和任何子范围. $apply()将更新每个范围.因此大多数时候$digest()将是您想要的并且更有效率.
解释为什么$apply()接受函数的最后一个区别是它们如何处理观察者中的异常. $apply()将异常传递给$exceptionHandler(在内部使用try-catch块),而$digest()将要求您自己处理异常.
angularjs – Angular $scope作为一个对象文字或多个$scope
angular.module('scopeExample',[]) .controller('MyController',['$scope',function ($scope) { $scope.username = 'World'; $scope.sayHello = function () { $scope.greeting = 'Hello ' + $scope.username + '!'; }; }]);
有什么理由我不应该使用对象文字
angular.module('scopeExample',function ($scope) { $scope.viewmodel = { greeting: '',username: 'World',sayHello: function(){ this.greeting = 'Hello ' + this.username + '!'; } }; }]);
解决方法
通过在视图中使用Controller As声明,您的视图中也会以点符号结束.
您的控制器代码最终可能如下所示:
angular.module('scopeExample',function () { var self = this; this.greeting = ''; this.username = ''; this.getName = function () { self.greeting = 'Hello ' + self.username + '!'; }; }]);
在视图中使用Controller As声明将产生以下结果:
<div data-ng-controller="UserController as user"> Hello {{ user.username }} </div>
因此,在此示例中,您最终得到的代码较少,但您在视图中保留了点符号.
请注意,在Angular 1.2.0之前,Controller As功能不可用
angularjs – Angular Route – 加载时调用函数
所以如果路由是/ blog我想在路由加载时初始化$scope.loadPosts().
如果路由是/ blog:id我想在路由加载时初始化$scope.loadPost($id).
angular.module('test',['ngRoute']) .config(['$routeProvider',function($routeProvider) { $routeProvider .when('/blog',{ controller: 'BlogController',template: '<h1>Blog</h1>',resolve: { init: function() { return function() { console.log('Loading Blog'); } } } }) .when('/blog/:id',template: '<h1>Blog ID</h1>',resolve: { init: function() { return function($route) { console.log('Loading Blog Article ' + $route.current.params.id); } } } }); } ]) .controller('BlogController',['$scope','$route','init',function($scope,$route,init) { init($route); } ]);
<!DOCTYPE html> <html ng-app="test"> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.min.js"></script> <script src="https://code.angularjs.org/1.4.6/angular-route.js"></script> </head> <body> <a href="#/blog">Go to Blog</a> <a href="#/blog/2">Go to Article 2</a> <div ng-view></div> </body> </html>
其他一些选择是:
>解决某些指示器,您可以在控制器内部的初始化函数中进行切换
>如果您正在加载博客路线,请解析未定义的对象,如果您正在加载blog:id route,请解析您为该路线加载的实际项目
希望这段代码能让您在任何决定的情况下开始正确的轨道.
编辑这里是一个link to a plunker,代码片段似乎间歇性地表现得很奇怪
今天的关于angularjs – 如何在收到两个或更多$scope事件后调用函数?和angularjs scope 原理的分享已经结束,谢谢您的关注,如果想了解更多关于Angular 2 – 如何在兄弟组件中调用函数?、angularjs – Angular $scope.$digest vs $scope.$apply、angularjs – Angular $scope作为一个对象文字或多个$scope、angularjs – Angular Route – 加载时调用函数的相关知识,请在本站进行查询。
本文标签: