Controller的创建
AngularJs controller使用无处不在,在里代码演示比较简单的创建工作。
<!DOCTYPE html> <html xmlns="http://www.w.org//xhtml" ng-app="exampleApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-"/> <title>App</title> <script src="/UploadFiles/2021-04-02/angular.js">在这控制很简单,首先我在html 中添加了 ng-app 属性,表示module的作用范围。
在 body 中添加了 ng-controller 表示 defaultCtrl 控制器的作用范围。
input 便签中ng-model 指令的是绑定数据,双向数据绑定(MVVM)。
$scope 是AngularJs内置的作用域。
此实例的只是把输入的值打印到控制台中,如图:
仅此而已,简单吧。
多个控制器controller作用域问题
现在我们来改造下程序,
<body > <div class="well" ng-controller="defaultCtrl"> <h>Count</h> <div class="form-group"> <input class="form-control" required ng-model="value" /> <button ng-click="setInput(value)">Click</button> </div> </div> <div class="well" ng-controller="defaultCtrl"> <h>Count</h> <div class="form-group"> <input class="form-control" required ng-model="value" /> <button ng-click="setInput(value)">Click</button> </div> </div> </body>其余代码不变,我只是把放到body 中的属性 ng-controller 放到了两个div中。我重用了defaultCtrl控制器,猜想下,如果我在第一个input标签输入内容,我点击第二个控制器的button按钮,会出现你所期望的结果吗"text-align: center">
结果是否和你想你的一样呢,大家可以看到这个结果为undefined. 在个很好解释,应为他们的作用域不同,虽然你重复使用了统一控制器,但是在创建作用域确实不同的。
调用的工厂函数会返回不同的作用域。
那么如何进行不同作用域之间的访问呢,在Angularjs中对于作用域访问有个$rootScope 。
在这里有三个函数需要介绍下,
$on(name,handler) 注册一个事件处理函数,该函数在特定的事件被当前作用域收到时将被调用。
$emit(name,args) 向当前父作用域发送一个事件,直至根作用域。
$broadcast(name,args) 向当前作用域下的子作用域发送一个事件,参数是事件名称以及一个用于作用向事件提供额外数据的对象。
现在来更改下代码:
<script> angular.module("exampleApp", []) .controller("defaultCtrl", function ($scope,$rootScope) { $scope.$on("UpdateValue", function (event, args) { $scope.input = args.zip; }); $scope.setInput = function (value) { $rootScope.$broadcast("UpdateValue", { zip: value }); console.log("print:" + $scope.input); } $scope.copy = function () { console.log("copy:" + $scope.input); }; }); </script> <div class="well" ng-controller="defaultCtrl"> <h>Count</h> <div class="form-group"> <input class="form-control" required ng-model="value" /> <button ng-click="copy()">Copy</button> </div> </div>在段代码中我添加了几个函数,同时改变了第二个控制器的函数。
结果:
确实发生了。
controller继承
<script> angular.module("exampleApp", []) .controller("defaultCtrl", function ($scope, $rootScope) { //$scope.$on("UpdateValue", function (event, args) { // $scope.input = args.zip; //}); $scope.setInput = function (value) { //$rootScope.$broadcast("UpdateValue", { zip: value }); $scope.input = value; console.log("print:" + $scope.input); } $scope.copy = function () { console.log("copy:" + $scope.input); }; }) .controller("simpleCtrl", function ($scope) { $scope.copy = function () { console.log("copy:" + $scope.input); }; }); </script> <body ng-controller="defaultCtrl"> <div class="well"> <h>Count</h> <div class="form-group"> <input class="form-control" required ng-model="value" /> <button ng-click="setInput(value)">Click</button> </div> </div> <div class="well" ng-controller="simpleCtrl"> <h>Count</h> <div class="form-group"> <input class="form-control" required ng-model="value" /> <button ng-click="copy()">Copy</button> </div> </div> </body>我添加了一个控制器,simpleCtrl 仔细观察下,发现defaultCtrl 包含了simpleCtrl 中,所以作用simple 也继承 了。
结果图:发下我在第一个窗中输入时,第二个也变了,应为都是同一个value。
$scope 作用域问题,在使用controller时 要明白其作用域。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]