Intereting Posts
Как изменить флажок для переключателя с помощью jQuery? как использовать nth-of-type для classов – не элементы Переключение между значками при использовании FontAwesome 5.0 SVG Framework Как мне отменить отправку формы в кнопку отправки onclick? Font Awesome 4.2.0 не отображается в IE11 с режимом совместимости, включенным «Вкл.», HtmlUnit Ошибка Javascript при получении страницы Поместите элемент HTML относительно его контейнера, используя CSS Поддерживает ли порядок тегов, id, class и атрибут в селекторе CSS? Показать и скрыть div с помощью css Изменение местоположения карты google при изменении selectbox после загрузки карты и маркеров Есть ли проверенный HTML-парсер, реализованный в Java? Как получить смещение пикселя от текущей позиции каретки в iframe с contentEditable CSS Grid с переменным числом «авто» строк, но одна строка должна принимать «1fr», Форма HTML не работает с кнопкой отправки изображения? Контрольная «карусель», требуемая директивой «ngTransclude», не может быть найдена

Значение eval в Scope не определено в директиве AngularJS

Предпосылки: Я пытаюсь запустить обратный вызов, когда происходит что-то внутри кода директивы в AngularJS.

Соответствующий код:

HTML:

 

controller:

 $scope.updateAvatarData = function(c){ alert("¡¡¡Funciona!!!!"); }; 

Директива:

 <> link: function(scope,element, attr) { scope.wsId = attr.id+'WS'; scope.pvId = attr.id+'preview'; scope.x = attr.x; scope.y = attr.y; scope.aspectRatio = scope.x/scope.y; scope.previewStyle = "width:"+scope.x+"px;height:"+scope.y+"px;overflow:hidden;"; scope.onSelectFn = scope.$eval(attr.onselect); <> 

Проблема заключается в последней строке «scope.onSelectFn = scope. $ Eval (attr.onselect);». Этот «объем. $ Eval (attr.onselect)»; возвращает ‘undefined’. Функция attr.onselect работает нормально, она возвращает имя функции, введенной атрибутом onselect.

Я сделал другие директивы с функциями, переданными через attibutes, без проблем, но я не могу найти то, что я делаю неправильно здесь.

  • заранее спасибо

    Почему вы так делаете, когда u можете легко использовать функцию «&», доступную с угловым

    вызов метода родительского controllerа из директивы в AngularJS

    Тем не менее, если вы хотите вызвать родительскую функцию, подобную этой, вы должны использовать $ parse вместо eval, чтобы увидеть очень маленький пример при использовании

      link: function (scope,element,attrs) { var parentGet = $parse(attrs['onselect']); var fn = parentGet(scope.$parent); fn(); }, 

    scope.$eval(attr.onselect) должен работать.

    Вот рабочая скрипка (протестированная в Chrome) с минимальной функцией ссылок:

     link: function(scope, element, attr) { scope.onSelectFn = scope.$eval(attr.onselect); console.log(attr.onselect, ',', scope.onSelectFn); scope.onSelectFn(); }, 

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

    По умолчанию $eval оценивает данное выражение только в текущей области. Вы можете передать другой объект данных для оценки, и в вашем случае это родительская область. Вы должны называть это следующим образом:

     scope.onSelectFn = scope.$eval(attr.onselect, scope.$parent); 

    См. Документацию здесь