почему интерполяция работает внутри ng-show, а не внутри ng-click

// шаблон

      <div ng-controller="myController">
        <input type="text" ng-model="name">
        <p>{{name}}</p>
        <p>{{10+10}}</p>
        <button type="button" ng-click="{{myFunction()}}">click Me !!</button>

        <p ng-show="{{myFunction()}}">The name is {{ name | uppercase }}</p>

      </div>

// Controller

myApp.controller('myController', function ($scope) {

  $scope.name = 'Ranka';
  $scope.myFunction = function(){
    return true;
  };

});

Здесь он терпит неудачу в случае ng-click

angular.js:14525 Ошибка: [$parse:syntax] Синтаксическая ошибка: токен '{' неверный ключ в столбце 2 выражения [{{myFunction()}}], начиная с [{myFunction()}}].


person Sourabh Ranka    schedule 13.07.2017    source источник
comment
Интерполяция не требуется для ng-show, и рекомендуется не запускать события на ng-show, так как это увеличит использование памяти. События должны запускаться только для таких вещей, как ng-click, ng-change и т. д., где вам не нужна интерполяция, поскольку все это угловые директивы.   -  person Vivz    schedule 13.07.2017
comment
Я думаю, что это хороший вопрос, если вопрос связан с двусторонней привязкой в ​​​​функции.   -  person Ramesh Rajendran    schedule 13.07.2017


Ответы (3)


Просто используйте без выражения,

<button type="button" ng-click="myFunction()">click Me !!</button>
person Sajeetharan    schedule 13.07.2017
comment
Да, я могу это сделать, но почему я не могу делать то, что пытаюсь, поскольку ng-click просто требует выражения angularjs. - person Sourabh Ranka; 13.07.2017

ng-show и ng-click уже являются встроенной директивой в angularjs. Таким образом, нам не нужно помещать его в фигурные скобки для этих выражений.

Без контроллера мы делаем контекст в самом html. Используйте директиву ng-init, чтобы определить как переменную, которая вам нравится, и переопределить переменную в ng-click, как вы хотите.

<div ng-controller="MyCtrl" ng-init="showName = false;">
 <input type="text" ng-model="name">
        <p>{{name}}</p>
        <p>{{10+10}}</p>
        <button type="button" ng-click="showName = true">click Me !!</button>

        <p ng-show="showName">The name is {{ name | uppercase }}</p>
</div>

контроллер:

var myApp = angular.module('myApp',[]);

    function MyCtrl($scope) {
       $scope.name = 'Ranka';
    }

Рабочая скрипта

person Arunkumar G    schedule 13.07.2017
comment
извините, но мой вопрос: почему мы не можем добавить интерполяцию в выражение, если нам разрешено делать это внутри атрибута ng-show? - person Sourabh Ranka; 13.07.2017
comment
Для всего, что нам нужно в одностороннем порядке, мы будем использовать фигурные скобки (интерполяция). Но директива ng-show по своей природе ссылается на модель и, следовательно, не требует интерполяции. - person Arunkumar G; 13.07.2017

попробуй этот простой способ

    <button type="button" ng-click="{{ myFunction(); isShow = false}}">click Me !!</button>

    <p ng-show="{{isShow}}">The name is {{ name | uppercase }}</p>

и контроллер должен быть таким,

var myApp = angular.module('myApp',[]);
       function MyCtrl($scope) {
       $scope.isShow= true;
       $scope.name = 'hallow world!';
    }
person Ramesh Rajendran    schedule 13.07.2017