2015-01-15 3 views
0

Можно определить, в каком свойстве scope должно быть указано атрибуты, определенные в директиве? например:Как определить, где привязать изолированные свойства области в Angularjs?

angular.module("myMod",[]). 
directive("myDir", { 
    restrict: "E", 
    scope: { 
     prop1: "@myProp1", 
     prop2: "@myProp2", 
    }, 
    controller: function($scope){ 
     //Here I have prop1 and prop2 assigned to $scope 
     $scope.prop1; 
     $scope.prop2; 
    }, 
}); 

Но то, что я хочу что-то вроде:

angular.module("myMod",[]). 
directive("myDir", { 
    restrict: "E", 
    scope: { 
     config: { prop1: "@myProp1" }, //This is invalid 
     prop2: "@myProp2", 
    }, 
    controller: function($scope){ 
     //And here, $scope.config.prop1 refers to myProp1 
     $scope.config.prop1; 
     $scope.prop2; 
    }, 
}); 

Я нашел частичное решение: с помощью controllerAs и bindToController, controllerAs определяет псевдоним для обозначения контроллера и bindToController связывает изолированный объем свойства в контроллер, то у меня есть:

$scope.alias.prop1 
$scope.alias.prop2 

Но я не хочу, чтобы связать все свойства контроллера, потому что не нужно т шапка. Я хочу привязать некоторые из них к свойству области видимости, а остальное - к другому свойству или непосредственно к области.

Почему я пытаюсь это сделать? Потому что я хочу назначить: $ scope.config = newConfig;

Это проще, чем:

$scope.prop1 = newProp1; 
$scope.prop2 = newProp2; 

ответ

0

не имеют сильную идею, но только идея. Как насчет того, чтобы использовать что-то вроде этого?

var cfg = {prop1: '@myProp1'}; 
angular.module("myMod",[]). 
directive("myDir", { 
    restrict: "E", 
    scope: { 
     config: cfg.prop1, 
     prop2: "@myProp2", 
    }, 
    controller: function($scope){ 
     $scope.config; 
     $scope.prop2; 
    }, 
}); 
+0

это же делать: объем: { конфигурации: {param1: «@ myParam1»} } и не действует – Ferchi

0

Я не уверен, если это возможно сделать именно так, как вы хотите (github angular), но может быть, это будет соответствовать что-то вроде этого:

angular.module("myMod", []).directive("myDir", function() { return { restrict: "E", scope: { config: "&myConfig", prop2: "@myProp2" }, link: function($scope){ console.log($scope.config(), $scope.prop2); } } });

Так в HTML вы быть в состоянии определить конфигурации:

<div ng-app="myMod"> <my-dir my-config='{config1: "conf1Val", config2: "conf2Val"}' my-prop2="prop2Val">wver</my-dir> </div>

http://jsfiddle.net/xrvpoe4r/2/

Другой способ заключается в определении конвенции, например, каждая конфигурация должна начинаться с «config-», и сделать директиву, которая будет создавать новое поле (объект) в объеме на основе таких атрибутов Например: http://jsfiddle.net/xrvpoe4r/4/

+0

Если я определяю MyConfig, такие как ваш пример, config1 и config2 свойства будут постоянно оцениваться с '&' (определенный в «& myConfig»), и он более подробен. Вы дали мне идею с вашим предложением «конвенции», но не совсем понимаете, можете ли вы объяснить более подробно? – Ferchi

+0

Обновлено мой ответ http://jsfiddle.net/xrvpoe4r/4/ Не уверен, что это отлично, но может быть, это было бы интересно – Rodion

Смежные вопросы