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

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

AngularJS子級(jí)作用域問(wèn)題(ngInclude;ngView;ngSwitch;ngRepeat)

標(biāo)簽:
AngularJS

大家在使用angularjs的时候,很容易忽略AngularJS自带指令的作用域问题,有一些指令会产生独立的自己作用域,造成子级无法与父级作用域双向绑定的问题。这些指令目前有<code>ng-include</code>、<code>ng-view</code>、<code>ng-switch</code>、<code>ng-repeat</code>。这样的原因是因为,这些指令虽然是AngularJS内部定义的,但是也是和<code>directive</code>实现的方法都是一样的,其内部使用的是<code>scope:true</code>的方式,子作用域继承了父级的作用,并且构建了一个独立的子作用域,所有双向绑定实现不了,只能单独实现子级作用域继承父级的属性。<p>
AngularJS的继承是通过javascript的原型继承方式实现的,进行原型继承即意味着父作用域在子作用域的原型链上。因为原型链的检索只会在属性检索的时候触发,不会在改变属性值的时候触发。所以我们需要把原始类型转换成对象,把值绑定在对象的属性上。<p>


489

示例.gif


大家可以在示例上看到,经过改造之后,就可以实现子级修改父级作用域的属性。原始类型只能继承父类的作用域。实现方法目前看有三种,下面一次来介绍<p>

通过给父级scope上添加<code>{}</code>来实现,把原始类型转换成对象。代码如下:

<!DOCTYPE html><html lang="en" ng-app="childScope"><head>
    <meta charset="UTF-8">
    <title></title>
    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/angular.min.js" type="text/javascript"></script>
    <style>
        .inputOne{            width: 100px;            height: 50px;            background: skyblue;
        }        .inner{            border: 1px solid skyblue;            width: 200px;            height: 150px;
        }        .outer{            border: 1px solid salmon;            width: 200px;            height: 150px;
        }        .sco{            background: skyblue;
        }    </style></head><body ng-controller="childCon">
    <div class="inner">
        <h3>父级作用域</h3>
        <span>{{vm.private1}}</span>
        <span>{{vm.private2}}</span>
    </div>
    <div class="outer">
        <h3>自己作用域</h3>
        <div class="one" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'one.html'"></div>
        <div class="two" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'two.html'"></div>
    </div></body><script>
    var app=angular.module("childScope",['template'])
                .controller("childCon",["$scope", function ($scope) {                var vm=$scope.vm={};
                vm.private1=12;
                vm.private2=13;
                $scope.test=123;
            }]);    var template=angular.module("template",[])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("one.html","" +                        "<div><input type='text' ng-model='vm.private1'/></div>")
            }])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("two.html","" +                        "<div><input type='text' ng-model='vm.private2'/>" +                        "<div class='sco'><span>原始类型</span>{{test}}</div>" +                        "</div>")
            }])</script></html>

通过<code>controller as</code>语法来实现

<code>controller as</code>其实相当于controller的示例对象,原理还是把原始类型转换成对象类型。

<!DOCTYPE html><html lang="en" ng-app="childScope"><head>
    <meta charset="UTF-8">
    <title></title>
    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/angular.min.js" type="text/javascript"></script>
    <style>
        .inputOne{            width: 100px;            height: 50px;            background: skyblue;
        }        .inner{            border: 1px solid skyblue;            width: 200px;            height: 150px;
        }        .outer{            border: 1px solid salmon;            width: 200px;            height: 150px;
        }        .sco{            background: skyblue;
        }    </style></head><body ng-controller="childCon as vm">
    <div class="inner">
        <h3>父级作用域</h3>
        <span>{{vm.private1}}</span>
        <span>{{vm.private2}}</span>
    </div>
    <div class="outer">
        <h3>自己作用域</h3>
        <div class="one" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'one.html'"></div>
        <div class="two" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'two.html'"></div>
    </div></body><script>
    var app=angular.module("childScope",['template'])
            .controller("childCon",["$scope", function ($scope) {                this.private1=12;                this.private2=22;
                $scope.test=123;
            }]);    var template=angular.module("template",[])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("one.html","" +                        "<div><input type='text' ng-model='vm.private1'/></div>")
            }])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("two.html","" +                        "<div><input type='text' ng-model='vm.private2'/>" +                        "<div class='sco'><span>原始类型</span>{{test}}</div>" +                        "</div>")
            }])</script></html>

使用<code>$parent.name</code>调用内部方法来实现。

进行原型继承即意味着父作用域在子作用域的原型链上,这是JavaScript的特性。AngularJS的作用域还存在如下内部定义的关系:
<ul>
<li>scope.$parent指向scope的父作用域;</li>
<li>scope.$$childHead指向scope的第一个子作用域;</li>
<li>scope.$$childTail指向scope的最后一个子作用域;</li>
<li>scope.$$nextSibling指向scope的下一个相邻作用域;</li>
<li>scope.$$prevSibling指向scope的上一个相邻作用域;</li>
</ul>
通过在子级作用域中使用<code>scope.$parent.name</code>,来获取对父级作用域的双向绑定。
示例如下:

<!DOCTYPE html><html lang="en" ng-app="childScope"><head>
    <meta charset="UTF-8">
    <title></title>
    <script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="lib/angular.min.js" type="text/javascript"></script>
    <style>
        .inputOne{            width: 100px;            height: 50px;            background: skyblue;
        }        .inner{            border: 1px solid skyblue;            width: 200px;            height: 150px;
        }        .outer{            border: 1px solid salmon;            width: 200px;            height: 150px;
        }        .sco{            background: skyblue;
        }    </style></head><body ng-controller="childCon">
    <div class="inner">
        <h3>父级作用域</h3>
        <span>{{private1}}</span>
        <span>{{private2}}</span>
    </div>
    <div class="outer">
        <h3>自己作用域</h3>
        <div class="one" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'one.html'"></div>
        <div class="two" ng-include class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="'two.html'"></div>
    </div></body><script>
    var app=angular.module("childScope",['template'])
            .controller("childCon",["$scope", function ($scope) {
                $scope.private1=12;
                $scope.private2=22;
                $scope.test=123;
            }]);    var template=angular.module("template",[])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("one.html","" +                        "<div><input type='text' ng-model='$parent.private1'/></div>")
            }])
            .run(["$templateCache", function ($templateCache) {
                $templateCache.put("two.html","" +                        "<div><input type='text' ng-model='$parent.private2'/>" +                        "<div class='sco'><span>原始类型</span>{{test}}</div>" +                        "</div>")
            }])</script></html>

大家如果有什么疑问,欢迎提出来。<p>



作者:MakingChoice
链接:https://www.jianshu.com/p/ba9322bed9eb


點(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ì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

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

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

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

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

幫助反饋 APP下載

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

公眾號(hào)

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

舉報(bào)

0/150
提交
取消