第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

AngularJS之指令中controller與link

標(biāo)簽:
JavaScript

前言

在指令中存在controller和link属性,对这二者心生有点疑问,于是找了资料学习下。

话题

首先我们来看看代码再来分析分析。

第一次尝试

页面:

    >

脚本:

复制代码

angular    .module('app',[])    .directive('customDirective', customDirective); customDirective() {     {        restrict: 'EA',        template: '<div>{{vm.test}}</div>',        link: (){},        controller: directiveController,        controllerAs: 'vm'    };     directive;} directiveController() {    ;    vm.test = "I'm from Controller";}

复制代码

 

【注】:基础还是非常重要,页面上为custom-directive,在脚本我写成customdirective时死都没出效果,改成customDirective才好使。

第二次尝试

页面自定义指令不变,我们就修改下脚本:

复制代码

angular    .module('app',[])    .directive('customDirective', customDirective); customDirective() {     {        restrict: 'EA',        template: '<div>{{test}}</div>',        link: directiveLink    };     directive;} directiveLink(scope,elem,attr) {    scope.test = "I'm from Link";}

复制代码

到这里,我们不仅要开始思索:指令中的controller和link都可以实现同样的效果,那在指令中放这两个属性干嘛?我们的代码到底是放在controller还是link中?

我们首先来看看当二者一起使用时,呈现结果的顺序即在编译前后生成的顺序。

controller和link编译顺序

我们将脚本进行修改如下:

复制代码

angular    .module('app',[])    .directive('customDirective', customDirective); customDirective() {     {        restrict: 'EA',        template: '<div>xpy0928{{test}}</div>',        link: directiveLink,        controller:directiveController    };     directive;} directiveController($scope){    $scope.test = " from contrller cnblogs";} directiveLink(scope,elem,attr) {    scope.test = scope.test + ",and from link cnblogs";}

复制代码

生成如下:

我们由此得出结论:编译之前执行控制器(controller),编译之后执行链接(link)。

但是我们还未从根本上解决问题,在controller和link应该放哪些代码?我们接下来再看一个例子:

复制代码

,[]);    app.directive('customDirective', customDirective); customDirective() {     {        restrict: 'EA',        template: '<child-directive><child-directive>',      function($scope, $element) {            $element.find('span').text('hello cnblogs!');        }    };     directive;}app.directive("childDirective",childDirective); childDirective() {     {        restrict: 'EA',        template: '<h1>hello xpy0928</h1>',        replace: ,        link: ($scope, $element, attr) {                        $element.replaceWith(angular.element('<span>' + $element.text() + '</span>'));        }    }     directive;}

复制代码

此时结果应该还是hello xpy0928还是hello cnblogs呢?我们看下结果:

我们再来将如上进行修改看看:

复制代码

,[]);    app.directive('customDirective', customDirective); customDirective() {     {        restrict: 'EA',        template: '<child-directive><child-directive>',      function(scope, el) {            el.find('span').text('hello cnblogs!');        }    };     directive;}app.directive("childDirective",childDirective); childDirective() {     {        restrict: 'EA',        template: '<h1>hello xpy0928</h1>',        replace: ,        link: ($scope, $element, attr) {                        $element.replaceWith(angular.element('<span>' + $element.text() + '</span>'));        }    }     directive;}

复制代码

为什么会出现如此情况?因为在controller函数中此时所有child-directive指令中的link函数还未运行所以此时替换无效。

由此我们可以基本得出在controller和link中应该写什么代码的结论:

(1)在controller写业务逻辑(我们明白业务逻辑大部分是放在服务中),这里所说的业务逻辑乃是为呈现视图之前而准备的数据或者是与其他指令进行数据交互而暴露这个api。

(2)在link中主要操作DOM。

总结

指令乃是AngularJS中比较重要的一块,里面涉及到的东西也是非常之多,时不时的去往里面去灌东西,慢慢就会得心应手。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消