Установите переменную scope angular в разметке

Простой вопрос: как установить значение области в html для чтения моим контроллером?

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

app.controller('MyController', function($scope) {
  console.log($scope.myVar);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app'>
  <div ng-controller="MyController" app-myVar="test">
    {{myVar}}
  </div>
</div>

Ответ 1

ng-init не работает, когда вы назначаете переменные внутри цикла. использование {{myVariable=whatever;""}}

Конечная "" останавливает выражение Angular, которое оценивается для любого текста.

Затем вы можете просто вызвать {{myVariable}} для вывода значения переменной.

Я нашел это очень полезным при повторении нескольких вложенных массивов, и я хотел сохранить текущую итерационную информацию в одной переменной, а не запрашивать ее несколько раз.

Ответ 2

ngInit может помочь инициализировать переменные.

<div ng-app='app'>
    <div ng-controller="MyController" ng-init="myVar='test'">
        {{myVar}}
    </div>
</div>

пример jsfiddle

Ответ 3

Создайте директиву под названием myVar с помощью

scope : { myVar: '@' }

и назовите его следующим образом:

<div name="my_map" my-var="Richmond,VA">

Обратите внимание, в частности, на ссылку верблюжьего случая в директиве на имя дефисного тега.

Для получения дополнительной информации см. "Общие сведения о трансклюзии и области действия" здесь: - http://docs.angularjs.org/guide/directive

Вот сценарий, в котором показано, как вы можете копировать значения из атрибутов в переменные области видимости различными способами в пределах директивы.

Ответ 4

Вы можете установить значения из html, как это. Я не думаю, что есть прямое решение от angular.

 <div style="visibility: hidden;">{{activeTitle='home'}}</div>

Ответ 5

Вы можете использовать ng-init, как показано ниже

<div class="TotalForm">
  <label>B/W Print Total</label>
  <div ng-init="{{BWCount=(oMachineAccounts|sumByKey:'BWCOUNT')}}">{{BWCount}}</div>
</div>
<div class="TotalForm">
  <label>Color Print Total</label>
  <div ng-init="{{ColorCount=(oMachineAccounts|sumByKey:'COLORCOUNT')}}">{{ColorCount}}</div>
</div>

а затем используйте локальную переменную области видимости в других разделах:

<div>Total: BW: {{BWCount}}</div>
<div>Total: COLOR: {{ColorCount}}</div>

Ответ 6

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

Итак, в globalController создайте

$scope.setScopeVariable = function(variable, value){
    $scope[variable] = value;
}

а затем в вашем html файле вызовите его

{{setScopeVariable('myVar', 'whatever')}}

Это позволит вам использовать $scope.myVar в вашем соответствующем контроллере

Ответ 7

$scope.$watch('myVar', function (newValue, oldValue) {
        if (typeof (newValue) !== 'undefined') {
            $scope.someothervar= newValue;
//or get some data
            getData();
        }


    }, true);

Переменная инициализируется после контроллера, поэтому вам нужно следить за ней и когда она инициализируется ее использованием.