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


простой вопрос: Как я могу установить значение области в 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>

JSFiddle:http://jsfiddle.net/ncapito/YdQcX/

8 84

8 ответов:

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

трейлинг "" останавливает вычисление углового выражения для любого текста.

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

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

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

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

пример jsfiddle

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

scope : { myVar: '@' }

и назовем это так:

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

обратите внимание, в частности, на ссылку camel case в директиве на имя тега с переносом.

дополнительные сведения см. В разделе "передача и областей" здесь:- http://docs.angularjs.org/guide/directive

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

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

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

можно использовать 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>

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

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

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

Так что в globalController create

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

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

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

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

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


    }, true);

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

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

{{var=foo;""}}

"" alows не отображает ваш var