Я изучаю AngularJS и делаю некоторые безумные эксперименты, чтобы очистить понятия о scope
, directives
и dom
.AngularJS - изменить область действия HTML-элемента на новую область.
AIM: Изменить сферу HTML элемента <div id="grocery">
вновь созданный дочерний объем»
index.html
<html ng-app="eggly" ng-controller="rootCtrl">
<body>
<div id="grocery">
{{box}}
</div>
</body>
</html>
rootCtrl
eggly.controller('rootCtrl',function($scope,$timeout,$compile){
$scope.box = "lunchbox"; --> first assign box = lunchbox
$timeout(function(){
//delete $scope;
var newScope = $scope.$new(); --> create a new scope
newScope.box = "dinnerbox"; ---> Assign new value
$compile($('#grocery'))(newScope); --> compile div with new scope
//newScope.$apply(); --> I think $timeout already do $apply so commented out
},1000);
});
Мой вопрос :
- Если я не создаю
new scope
и не$compile
в$timeout
функции, то на мой взгляд обновляется сdinnerbox
, как я ожидал - Если я создаю
new scope
и$compile
в$timeout
функции, то на мой взгляд показывает мне старое значение ИЭlunchbox
но хром консоль показать мнеangular.element($0).scope().box
показывает мнеdinnerbox
в области (после $ timeout исполнения).
Что я делаю неправильно?
Ничего этого не принадлежит в контроллере, в первую очередь. Также вы не используете '$ compile' для объекта jQuery. То, что вы пытаетесь сделать, это создать директиву бедного человека и использовать для этого настоящую угловую директиву. – charlietfl
@charlietfl: Помимо того, что вы прокомментировали, единственное, что я ожидаю от вас, знаете ли вы, почему он не работает? Спасибо – voila
@charlietfl: с компиляцией $ либо вы можете использовать angular.element объекта jquery. AFAIK – voila