[英]How do I trigger the manipulation of the DOM after a partial view is loaded in AngularJS?
在AngularJS中加載部分視圖后,如何觸發DOM的操縱?
如果我使用的是jQuery,則可以
$(document).ready(function(){
// do stuff here
}
但是在Angular中,特別是在局部視圖中,我該怎么做? 作為更具體的示例,我有以下基本的非交互式Angular應用程序(同一頁面源上的html和js):
http://cssquirrel.com/testcases/ang-demo/
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Angular Question</title>
</head>
<body data-ng-app="demoApp">
<div data-ng-view=""></div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
<script>
var app = angular.module('demoApp', []);
var controller = {
demoController: function ($scope, demoFactory) {
$scope.fruits = demoFactory.getFruits();
}
};
var factory = {
demoFactory: function () {
var fruits = ['apples', 'bananas', 'cherries'];
var factory = {
getFruits: function () {
return fruits;
}
};
return factory;
}
}
function appRoute($routeProvider) {
$routeProvider
.when('/step-1',
{
controller: 'demoController',
templateUrl: 'partial.html'
})
.otherwise({ redirectTo: '/step-1' });
};
app.config(appRoute);
app.factory(factory);
app.controller(controller);
</script>
</body>
</html>
其中具有以下部分:
http://cssquirrel.com/testcases/ang-demo/partial.html
<ul>
<li data-ng-repeat="fruit in fruits">{{fruit}}</li>
</ul>
因此,如果在此基本應用程序中,我想在部分視圖加載完成后向列表中的第一個列表項添加“活動”類,該如何處理?
您必須停止對DOM操作的思考。 這不是第一個活動的LI,而是被選擇的第一個水果。
首先,支持選擇水果的概念
var fruits = [
{ name: 'apples', active: true },
{ name: 'bananas', active: false },
{ name: 'cherries', active: false }
]
然后,在您的角度模板中使用ng-class支持該屬性:
<ul>
<li data-ng-repeat="fruit in fruits" ng-class="{ active: fruit.active }">{{fruit.name}}</li>
</ul>
現在,您可以操縱水果數組並更改選擇的數組,例如:
$scope.fruits[2].active = true;
AngularJS是模型驅動的。 如果要更改DOM,請改為更改數據。
您可以使用$first
屬性激活轉發器的第一項。
<ul>
<li ng-class="{active : $first}" data-ng-repeat="fruit in fruits">{{fruit}}</li>
</ul>
或者,如果您想通過單擊來手動激活轉發器的任何項目,則可以更改模型對象的激活字段。
<ul>
<li ng-class="{true: 'active', false: ''}[fruit.active]" ng-repeat="fruit in fruits" ng-click="activate(fruit)">{{fruit.name}}</li>
</ul>
使用此數據結構
var factory = {
demoFactory: function () {
var fruits = [{
name: 'apples',
active: true
}, {
name: 'bananas',
active: false
}, {
name: 'cherries',
active: false
}]
var factory = {
getFruits: function () {
return fruits;
}
};
return factory;
}
}
並將其添加到控制器中。
$scope.activate = function (fruit) {
console.log(fruit)
fruit.active = true;
}
您將在該模型上設置一個活動屬性,並檢查是否將其添加到每個元素。
var controller = {
demoController: function ($scope, demoFactory) {
$scope.fruits = demoFactory.getFruits();
$scope.fruits[0].isActive = true; // kinda hacky
}
};
<ul>
<li data-ng-repeat="fruit in fruits" ng-class="{ active: fruit.isActive }}">{{fruit}}</li>
</ul>
這不正是我會怎么做,但角度它始終是最好的,讓你保持你的應用程序的狀態,1單明確表示編輯模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.