国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

angulaire.js - La liaison bidirectionnelle angulaire est rompue?!
伊謝爾倫
伊謝爾倫 2017-05-15 16:52:42
0
4
1025

Collez d'abord le code?:

contr?leur?:

.controller('FoldController', ['$scope', function ($scope){
    $scope.isFolded = true;   //  標(biāo)志是否折疊的狀態(tài)
}])

directive?:

.directive('fold', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {

            // 只要點(diǎn)擊其中的內(nèi)容,讓其折疊回去
            element.on('click',function () {  
                scope.isFolded = true;
                element.slideUp();
                console.log(scope);             
            });

            // 折疊的函數(shù)                
            function toggleFold(isFold) {

                isFold ? element.slideUp() : element.slideDown();
            }       

            // 監(jiān)視是否折疊,即controller里定義的標(biāo)志
            scope.$watch(attrs.fold, function (isFold) {
                toggleFold(isFold);
            });
        }
    }
})

html?:

<nav class="navbar navbar-default" ng-controller="FoldController">
    <p class="container">
        <p class="navbar-header">
            <button type="button" class="navbar-toggle"
             ng-click="isFolded=!isFolded">  
            //  主要是這里  點(diǎn)擊后toggle折疊的標(biāo)志

                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>

            <a href="#/index" class="navbar-brand">Index {{isFolded}}</a>
                                          // 為了方便測試,我將折疊表示顯示出來
        </p>
                                           // 這里用directive控制
        <p class="navbar-collapse collapse" fold="isFolded">
            <ul class="navbar-nav nav">
                <li class="active"><a href="#/index">index</a></li>
                <li><a href="#/about">about</a></li>
                <li><a href="#/contact">contact</a></li>
                <li><a href="#/chatroom">chatroom</a></li>
            </ul>
        </p>

    </p>
</nav>  

Effet?:

Une fois plié

Une fois déplié

Soumission préliminaire terminée, mes attentes sont?:

Lorsqu'il est déplié, cliquez sur la zone pliée pour le replier, et changez le drapeau pliable scope.isFold pour le restaurer à son état d'origine,

La question est?:

Il y aura un bug, c'est-à-dire que j'ai modifié la valeur de scope.isFold et vérifié que la valeur de scope a été modifiée, mais la valeur d'origine est toujours sur la page, c'est-à-dire que la liaison bidirectionnelle n'est pas valide . Voir l'image ci-dessous

D'après l'affichage de l'image, la zone de pliage a été pliée. La sortie scope.isFold ci-dessous est également normale, vraie, mais la valeur en haut de la page est fausse. J'ai vérifié l'élément dom et elle est correcte. . J'ai vérifié le contr?leur. La valeur de scope.isFold dans la directive est correcte. Cette situation se produit de manière erratique, ce qui est assez déprimant. . .

伊謝爾倫
伊謝爾倫

小伙看你根骨奇佳,潛力無限,來學(xué)PHP伐。

répondre à tous(4)
phpcn_u1582

Ajoutez $scope.$apply

à votre gestionnaire d'événements
洪濤
 <p class="navbar-collapse collapse" fold ng-model="isFolded">
            <ul class="navbar-nav nav">
                <li class="active"><a href="#/index">index</a></li>
                <li><a href="#/about">about</a></li>
                <li><a href="#/contact">contact</a></li>
                <li><a href="#/chatroom">chatroom</a></li>
            </ul>
        </p>

js

.directive('fold', function () {
    return {
        require: 'ngModel',
        restrict: 'A',
        link: function (scope, element, attrs) {

            // 只要點(diǎn)擊其中的內(nèi)容,讓其折疊回去
            element.on('click',function () {  
                scope.isFolded = true;
                element.slideUp();
                scope.$digest();
                console.log(scope);             
            });
   .....
     scope.$watch('isFolded', function (isFold) {
                toggleFold(isFold);
            });

為情所困

La solution est?:

Après avoir utilisé l'élément dom et modifié la valeur de l'attribut sur la portée, scope.$apply met à jour la vue

element.on('click', function() {
    pe.isFolded = !scope.isFolded;          
    element.slideUp();
    scope.$apply();
})
黃舟

En fait, beaucoup de gens ont un malentendu, c'est-à-dire qu'ils utilisent toujours la surveillance des événements elemnet.on dans la fonction de lien,
Pourquoi ne pas utiliser ngClick et écrire une fonction scope.click dans le lien ?

Sauf si vous utilisez un plug-in jQuery tiers

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal