ng-show не работи в шаблона на директива

Бих искал да направя нещо като тази цигулка, карайки текста да изчезва и да се появява отново с всяко щракване.

Проблемът е, че изглежда, че с изолиран обхват не можете да имате достъп до обхвата на контролера. Реших го във функцията за връзка, обработвайки там събитието за щракване и задавайки моя флаг "showMe", използвайки scope.$apply, като:

scope.$apply('showMe = false');

Това ли е правилният начин или има някакъв по-елегантен метод?


person Maddocche    schedule 27.08.2014    source източник


Отговори (3)


Ето го (http://jsfiddle.net/66d0t7k0/1/)

Поставете вашия манипулатор на кликвания във функцията за връзка и изложете showMe на scope

app.directive('example', function () {

    return {
        restrict: 'E',
        template: '<p ng-show=\"showMe\">Text to show</p><button ng-click=\"clickMe()\">Click me</button>',
        scope: {
            exampleAttr: '@'
        },
        link: function (scope) {
            scope.clickMe = function () {
                scope.showMe = !scope.showMe;
            };
        }
    };
});
person apairet    schedule 27.08.2014

За да разширите отговора на apairet, тъй като вашата директива използва изолиран обхват, можете да се справите с всичко това в самия шаблон по следния начин:

app.directive('example', function () {

    return {
        restrict: 'E',
        template: '<p ng-show=\"showMe\">Text to show</p><button ng-init=\"showMe = false\" ng-click=\"showMe = !showMe\">Click me</button>',
        scope: {
            exampleAttr: '@'
        },
        link: function (scope) {

        }
    };
});

Друго съображение е да използвате ng-if вместо ng-show, тъй като той не изобразява елемента в DOM, докато изразът не се изчисли като true.

person Rob J    schedule 28.08.2014

Неуспешно ли е отдалеченото валидиране на CheckDuplicatePerson? Ако премахнете тази проверка, работи ли?
person sillysicko    schedule 15.11.2015