мышь не работает должным образом

0

У меня есть сценарий, когда, когда я нажимаю на какой-то текст, мне нужно получить поле ввода, а текст должен скрываться, и когда я покину текстовое поле, ящик должен скрыться, и я должен показать текст обратно

но этого не происходит

Html

<div ng-app>
<div ng-controller="showCrtl">
   <div ng-hide="showme">
     <p ng-mouseenter="showme=!showme">
       mouse enter
     </p> 
   </div>
   <input type="search" ng-if="showme" ng-mouseleave="showme=false">
 </div>
</div>

JS:

function showCrtl($scope){
  $scope.showme=false;
}

Вот что я пробовал DEMO

Любая помощь приветствуется.

  • 0
    пожалуйста, проверьте эту скрипку jsfiddle.net/dMTc2/17
  • 0
    Не могли бы вы указать, где я иду не так @CemArguvanlı CemArguvanlı
Теги:

2 ответа

2
Лучший ответ

Проблема в том, что у вас было примитивное значение в директиве ng-if, вы знаете, что ng-if создает дочернюю область, когда он отображает этот элемент в DOM. Чтобы решить эту проблему, я предлагаю вам сделать это, просто следуйте Dot Rule, определяя новый объект. Затем определите все свойства, которые вы хотите использовать внутри этого объекта.

Если вы хотите, пошаривайте глубже, как работает наследование областей, вы можете обратиться к этому ответу.

Таким образом, в вашем коде вы должны определить объект, например, $scope.model = {} а затем иметь свойство showme внутри самого объекта. И везде, где вы используете showme на виду, замените это на model.showme.

Демо-скрипт


Более удобный способ решения такого рода вопросов наследования наследования заключается в том, что вы можете использовать шаблон controllerAs. В том, что вы не используете $scope внутри контроллера, вы просто место с контекстом контроллера this. При использовании контроллера на представлении вам нужно создать его псевдоним, и когда вы захотите получить значение переменной, вы можете использовать ссылку на переменную.

  • 0
    Спасибо, что работает сейчас
  • 1
    @Shikhathakur Рад помочь вам, посмотрите на обновленный ответ, помог бы вам больше прояснить понимание. Прочитайте указанный ответ, а также спасибо :)
1

Проблема в том, что у вас есть несколько вложенных областей. showme, которое задается в поле ввода, отличается от showme, установленного в p. Это происходит потому, что Angular неявно добавляет новую область для многих встроенных директив (ng-if является одним из них).

Вы должны быть уверены, что вы всегда устанавливаете и читаете одно и то же свойство showme. Самый простой способ сделать это - добавить свойство showme в контроллер.

Попробуй это:

<div ng-app>
   <div ng-controller="showCrtl">
     <div ng-hide="showCrtl.showme">
       <p ng-mouseenter="showCrtl.showme=!showCrtl.showme">
         mouse enter
       </p> 
     </div>
     <input type="search" ng-if="showCrtl.showme" ng-mouseleave="showCrtl.showme=false">
   </div>
</div>

Фактически, как общее правило, никогда не обращайтесь к области непосредственно в ваших шаблонах, так как очень трудно убедиться, что вы обращаетесь к области, к которой, по вашему мнению, обращаетесь. Всегда обращайтесь к свойствам через контроллер, с которым вы работаете.

  • 0
    Благодаря его работе сейчас @Andrew Eisenberg

Ещё вопросы

Сообщество Overcoder
Наверх
Меню