2015-03-06 4 views
1

Вот соответствующий HTML:переименования переменной в нг-включают в себя

<ng-include src="'app/views/order.html'"></ng-include> 

Прикрепленный к объему этого ng-include вложен в является переменной торговли. Переменная торговли выглядит следующим образом:

var trade = { 
    order: {} 
} 

Проблема заключается в том, что order.html ожидает переменная порядка не trade.order

Как я могу позвонить ng-include и передать в trade.order в order?

ответ

2

нг-включают читает переменные в глобальной области видимости. Вы не можете использовать это. Это не сработает.

И не используйте onload, потому что он поместит глобальный масштаб.

Очиститель решение сделать a new generic directive

Вот идеальное использование:

<div ng-include-template="'app/views/order.html'" ng-include-variables="{ order: trade.order }"></div> 

Директива:

.directive(
    'ngIncludeTemplate' 
() -> 
    { 
     templateUrl: (elem, attrs) -> attrs.ngIncludeTemplate 
     restrict: 'A' 
     scope: { 
     'ngIncludeVariables': '&' 
     } 
     link: (scope, elem, attrs) -> 
     vars = scope.ngIncludeVariables() 
     for key, value of vars 
      scope[key] = value 
    } 
) 

Вы можете видеть, что директива не использует глобальный объем. Вместо этого он считывает объект из ng-include-variables и добавляет эти члены в свою локальную область.

Надеюсь, это поможет. Это чистый и общий.

0

Решение создать новую директиву:

angular.module('MyApp').directive('includeTemplate', directive); 

    function directive() { 
     return { 
      templateUrl: function(elem, attrs) { 
       return attrs.includeTemplate; 
      }, 
      restrict: 'A', 
      scope: { 
       'includeVariables': '&' 
      }, 
      link: function(scope, elem, attrs) { 
       var vars = scope.includeVariables(); 
       Object.keys(vars).forEach(function(key) { 
        scope[key] = vars[key]; 
       }); 
      } 
     }; 
    } 

Здесь использование:

<div include-template="'myTemplate.html'" include-variables="{ var: 'myVar' }"></div> 
+0

Это решение относится к своим 'данные включают-variables' как статические. Он не будет отслеживать изменения, которые происходят в родительской области. С гораздо большим усилием вы могли бы иметь 2-направленное связывание изменений с данными 'include-variables': http://stackoverflow.com/a/17876761/361609 – colllin