2016-11-28 7 views
0

У меня есть угловой компонент:Получить связанное значение объекта углового компонента от его контроллера

module.exports = { 
    bindings: { 
     vulnerability: '<', 
    }, 
    controller: ['$scope', function($scope){ 
     //want to get value of vulnerability from above 
     $scope.vulnerability // doesn't work 
    }], 
}; 

, который я ссылаться в нг-повторить

<div ng-repeat="vulnerability in vulnerabilities" class="vulnerability-item"> 
    <vulnerability-item vulnerability="vulnerability"> </vulnerability-item> 
</div> 

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

Я разместил $scope.$watch на этом объекте, чтобы увидеть, работает ли он, и он срабатывал, но я не мог видеть новое или старое значение в обработчике часов, так что это все равно мне не помогло.

Я пробовал $scope.vulnerability и $ctrl.vulnerability, так как я бы ссылался на это свойство в шаблоне директив, но не работал. Как получить связанное значение, которое передается?

добавив эти часы:

$scope.$watch('vulnerability', function (oldV, newV) { 
     console.log('old', oldV) 
     console.log('new', newV) 
    }) 

Я получаю new undefined и old undefined в консоли для каждого экземпляра компонента, хотя, если я изменить $scope.$watch('vulnerability' к $scope.$watch('nonsense') Он по-прежнему срабатывает журналы один раз для каждого компонента.

+0

Пожалуйста, обновите вопрос с вашей попытки по использованию '$ сфера $ watch'.. Для 1.5 и компонентов ['$ onChanges'] (https://docs.angularjs.org/guide/component#component-based-application-architecture) предпочтительнее крючок. – estus

+0

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

ответ

1

Если значение не должно быть изменено, оно должно быть привязано один раз, vulnerability="::vulnerability". Это дает контекст этому вопросу (а также экономит время на оптимизации).

В этом случае $onInit крючок может быть использован:

... 
controller: function() { 
    this.$onInit = function() { 
    this.vulnerability 
    } 
}, 
+0

оказалось, что на него нужно ссылаться на 'this' not' $ scope', как в 'this.vulnerability' в контроллере Не могли бы вы изменить свой ответ на это и подробнее изучить уязвимость« уязвимость »? "' и плохо принять его – Andrew

+0

Хорошо. Что касается одноразовых привязок, см. Https://docs.angularjs.org/guide/expression#one-time-binding. Хорошая практика заключается в том, чтобы использовать их везде, где это возможно, он дает надлежащий контекст коду и делает хорошую работу при начальной оптимизации. – estus