создать новую область в директиве, как этотAngularJS: переменная Scope неопределенный в контроллере
controllersModule.directive('uploadBox', function() {
return {
restrict: 'E',
scope: {
topic: '=topic',
label: '=label'
},
templateUrl: '/assets/directives/uploadBox.html'
};});
И использовать эту директиву, как это (оба значения -label и конкретные темы являются значение, которые хранятся в файлах в формате JSON , в двух разных контроллерах)
<upload-box label="lc.getTerm('system_upload')" topic="tc.currentTopic.uID"></upload-box>
Таким образом, метка атрибута и тема передаются в новую (созданную) область. Теперь, самое смешное, в то время как я могу получить доступ оба значения в шаблоне HTML файл (uploadBox.html)
<div ng-controller="DropUploadCtrl">
<button class="btn btn-success" dropzone="dropzoneConfig">
<!-- label is correctly shown -->
{{ label }}
</button>
<!-- this link works fine: Evaluates to something like aaa/54dg54...SHA128-Hash...G4FX-->
<a ng-href="aaa/{{ topic }}">BB</a>
</div>
Только значение метки доступно внутри DropUploadController.
controllersModule.controller('DropUploadCtrl', ['$scope',function($scope) {
var that = this;
console.log($scope.label); // this is working fine
console.log($scope.topic); // this is undefined
// some more stuff here
}]);
Я знаю, что прицелы созданы для конкретных контроллеров и вы не можете разделить область видимости переменных непосредственно между двумя контроллерами. Однако я не думаю, что это проблема, потому что я могу использовать значение метки. Но, где я ошибаюсь, что неправильно в моем коде?
Большое спасибо
EDIT:
Выход для rootScope в контроллере
console.log("$scope::>");
console.log($scope.label);
console.log($scope.topic);
console.log("$rootScope::>")
console.log($rootScope.label);
console.log($rootScope.topic);
выглядит следующим образом:
"$scope::>"
"I'm a label"
undefined
"$rootScope::>"
undefined
undefined
Кроме того, значение не определено в функции связи директивы
Редактировать2: Решение было найдено! Значение в tc.currentTopic.uID не было заполнено в момент инициализации другого контроллера. Вот почему выражение {{topic}} работает нормально, потому что оно было снова оценено, когда значение изменилось, через пару мс позже. Теперь я получаю данные прямо через $ routeParams.
тег элемента является 'закачивать-box' но директива она определяется как' uploadBox', что нарочно? – ochi
Проверьте, имеет ли значение tc.currentTopic.uID значение в родительской области. –
@ochi Это соглашение в Angular, в этом нет ничего плохого. –