Skip to content

Commit 7db2e10

Browse files
author
Nedyalko Nikolov
committed
Added support for component specific css.
1 parent e069707 commit 7db2e10

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.test {
2+
background-color: cornflowerblue;
3+
}

ng-sample/app/examples/list/list-test-async.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ class DataItem {
88

99
@Component({
1010
selector: 'list-test-async',
11+
styleUrls: ['examples/list/list-test-async.css'],
1112
template: `
1213
<ListView [items]="myItems | async" (itemTap)="onItemTap($event)">
1314
<item-template>
1415
<template #item="item" #i="index" #odd="odd" #even="even">
1516
<StackLayout [class.odd]="odd" [class.even]="even">
16-
<Label [text]='"index: " + item.name'></Label>
17+
<Label className="test" [text]='"index: " + item.name'></Label>
1718
</StackLayout>
1819
</template>
1920
</item-template>

src/nativescript-angular/renderer.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import {
77
} from 'angular2/src/core/render/api';
88
import {isBlank} from 'angular2/src/facade/lang';
99
import {DOM} from 'angular2/src/platform/dom/dom_adapter';
10+
import {COMPONENT_VARIABLE, CONTENT_ATTR} from 'angular2/src/platform/dom/dom_renderer';
1011
import {View} from "ui/core/view";
1112
import {topmost} from 'ui/frame';
13+
import {Page} from 'ui/page';
1214
import * as util from "./view-util";
1315

1416
//var console = {log: function(msg) {}}
@@ -29,8 +31,18 @@ export class NativeScriptRootRenderer extends RootRenderer {
2931

3032
@Injectable()
3133
export class NativeScriptRenderer extends Renderer {
34+
private componentProtoId: string;
35+
private hasComponentStyles: boolean;
3236
constructor(private _rootRenderer: NativeScriptRootRenderer, private componentProto: RenderComponentType) {
3337
super();
38+
let page =<Page>(<any>topmost()).currentPage;
39+
let stylesLength = componentProto.styles.length;
40+
this.componentProtoId = componentProto.id;
41+
for(let i = 0; i < stylesLength; i++) {
42+
this.hasComponentStyles = true;
43+
let cssString = componentProto.styles[i] + "";
44+
page.addCss(cssString.replace(COMPONENT_VARIABLE, componentProto.id));
45+
}
3446
console.log('NativeScriptRenderer created');
3547
}
3648

@@ -126,7 +138,6 @@ export class NativeScriptRenderer extends Renderer {
126138
console.log('NativeScriptRenderer.setElementDebugInfo: ' + renderElement);
127139
}
128140

129-
130141
/**
131142
* Calls a method on an element.
132143
*/
@@ -145,7 +156,13 @@ export class NativeScriptRenderer extends Renderer {
145156

146157
public createElement(parentElement: util.NgView, name: string): util.NgView {
147158
console.log('NativeScriptRenderer.createElement: ' + name + ' parent: ' + parentElement + ', ' + (parentElement ? parentElement.nodeName : 'null'));
148-
return util.createView(name, parentElement);
159+
let result = util.createView(name, parentElement);
160+
// adding an attribute (property) to {N} view for applying component specific css.
161+
// The property value is generated by angular2 infrastructure on conponent creation.
162+
if (this.hasComponentStyles) {
163+
result[CONTENT_ATTR.replace(COMPONENT_VARIABLE, this.componentProtoId)] = true;
164+
}
165+
return result;
149166
}
150167

151168
public createText(value: string): util.NgView {
@@ -163,4 +180,4 @@ export class NativeScriptRenderer extends Renderer {
163180
public listenGlobal(target: string, eventName: string, callback: Function): Function {
164181
throw new Error('Not implemented.');
165182
}
166-
}
183+
}

0 commit comments

Comments
 (0)