Angularjs 角度2的变化检测
我把角1和角2积分在一起。因此,我有angular 1控制器和服务以及angular 2组件。对于数据检索和存储来说,它们工作得很好,反之亦然。下面是我的html页面Angularjs 角度2的变化检测,angularjs,angular,typescript,integration,Angularjs,Angular,Typescript,Integration,我把角1和角2积分在一起。因此,我有angular 1控制器和服务以及angular 2组件。对于数据检索和存储来说,它们工作得很好,反之亦然。下面是我的html页面 <body> <h3>Angular 1 service</h3> <div ng-controller="MainController"> <input ng-model="username" /> <button ng-click="setUse
<body>
<h3>Angular 1 service</h3>
<div ng-controller="MainController">
<input ng-model="username" />
<button ng-click="setUser()">Set User</button>
<button ng-click="getUser()">Get User</button>
<div>User in service : {{user}}</div>
</div>
<hr>
<h3>Angular 2 component uses Angular 1 service</h3>
<user-section></user-section>
</body>
服务如下:
myApp.controller('MainController', function ($scope, UserService) {
$scope.getUsers = function () {
UserService.setUser($scope.username);
window.location = './angular2.html'
};
$scope.setUser = function () {
UserService.setUser($scope.username);
$scope.user = $scope.username;
};
$scope.getUser = function () {
$scope.user = UserService.getUser();
};
});
function UserService(){
this.user = "default";
}
UserService.prototype.getUsers = function(){
var users = ['user1', 'user2', 'user3'];
return users;
}
UserService.prototype.setUser = function(usr){
this.user = usr;
}
UserService.prototype.getUser = function(){
return this.user;
}
import {Component, Inject} from 'angular2/core';
@Component({
selector: 'user-section',
templateUrl: '<div>
<input [(ngModel)]="username" />
<button (click)="setUser()">Set User</button>
<button (click)="getUser()">Get User</button>
<button (click)="getUsers()">Get Users</button>
<br/>
<ul>
<li *ngFor="#userId of users">{{userId}}</li>
</ul>
<div>User in service : {{user}}</div>
</div>'
})
export class UserSection {
constructor(@Inject('UserService') userService:UserService) {
this.users = [];
this.username = '';
this._UserService = userService;
}
getUsers(){
this.users = this._UserService.getUsers();
}
setUser(){
this._UserService.setUser(this.username);
}
getUser(){
this.user = this._UserService.getUser();
}
}
角度2分量如下所示
myApp.controller('MainController', function ($scope, UserService) {
$scope.getUsers = function () {
UserService.setUser($scope.username);
window.location = './angular2.html'
};
$scope.setUser = function () {
UserService.setUser($scope.username);
$scope.user = $scope.username;
};
$scope.getUser = function () {
$scope.user = UserService.getUser();
};
});
function UserService(){
this.user = "default";
}
UserService.prototype.getUsers = function(){
var users = ['user1', 'user2', 'user3'];
return users;
}
UserService.prototype.setUser = function(usr){
this.user = usr;
}
UserService.prototype.getUser = function(){
return this.user;
}
import {Component, Inject} from 'angular2/core';
@Component({
selector: 'user-section',
templateUrl: '<div>
<input [(ngModel)]="username" />
<button (click)="setUser()">Set User</button>
<button (click)="getUser()">Get User</button>
<button (click)="getUsers()">Get Users</button>
<br/>
<ul>
<li *ngFor="#userId of users">{{userId}}</li>
</ul>
<div>User in service : {{user}}</div>
</div>'
})
export class UserSection {
constructor(@Inject('UserService') userService:UserService) {
this.users = [];
this.username = '';
this._UserService = userService;
}
getUsers(){
this.users = this._UserService.getUsers();
}
setUser(){
this._UserService.setUser(this.username);
}
getUser(){
this.user = this._UserService.getUser();
}
}
angular 2需要始终激发eventgetUser才能从angular 1获取名称。工作打捞器
我想在angular 1输入更改时更新angular 2模型。有办法做到这一点吗?angular 2中有监听器,但我不知道如何让他们听angular 1服务 我想你应该看看Angular2中的ngDoCheck和OnChanges生命周期挂钩,Angular1中的$apply 使用$apply,控制器修改如下
var myApp = angular.module("hybridExampleApp", []);
//define as Angular 1 service
myApp.service('UserService', UserService);
myApp.controller('MainController', function ($scope, UserService) {
$scope.$watch('username',function(){
$scope.setUser();
});
$scope.getUsers = function () {
UserService.setUser($scope.username);
window.location = './angular2.html'
};
$scope.setUser = function () {
UserService.setUser($scope.username);
$scope.user = $scope.username;
};
$scope.getUser = function () {
$scope.user = UserService.getUser();
};
});
import {Component, Inject,ChangeDetectionStrategy,ngDoCheck,ngOnChanges} from 'angular2/core';
@Component({
selector: 'user-section',
templateUrl: './src/ng2-component/user.section.tpl.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UserSection implements ngDoCheck, ngOnChanges{
username123:number;
constructor(@Inject('UserService') userService:UserService) {
this.users = [];
this.username = '';
this.user=0;
this._UserService = userService;
}
ngOnChanges(){
console.log('adfkjna');
}
getUsers():void{
this.users = this._UserService.getUsers();
}
setUser():void{
this._UserService.setUser(this.username);
}
getUser():void{
this.user = this._UserService.getUser();
}
ngDoCheck(){
this.user = this._UserService.getUser();
this.getUser();
console.log(this.user);
}
}
使用ngDoCheck,您的user.section.component.ts修改如下
var myApp = angular.module("hybridExampleApp", []);
//define as Angular 1 service
myApp.service('UserService', UserService);
myApp.controller('MainController', function ($scope, UserService) {
$scope.$watch('username',function(){
$scope.setUser();
});
$scope.getUsers = function () {
UserService.setUser($scope.username);
window.location = './angular2.html'
};
$scope.setUser = function () {
UserService.setUser($scope.username);
$scope.user = $scope.username;
};
$scope.getUser = function () {
$scope.user = UserService.getUser();
};
});
import {Component, Inject,ChangeDetectionStrategy,ngDoCheck,ngOnChanges} from 'angular2/core';
@Component({
selector: 'user-section',
templateUrl: './src/ng2-component/user.section.tpl.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class UserSection implements ngDoCheck, ngOnChanges{
username123:number;
constructor(@Inject('UserService') userService:UserService) {
this.users = [];
this.username = '';
this.user=0;
this._UserService = userService;
}
ngOnChanges(){
console.log('adfkjna');
}
getUsers():void{
this.users = this._UserService.getUsers();
}
setUser():void{
this._UserService.setUser(this.username);
}
getUser():void{
this.user = this._UserService.getUser();
}
ngDoCheck(){
this.user = this._UserService.getUser();
this.getUser();
console.log(this.user);
}
}
我的代码完全记录了angular 1中的用户名更改,但我不明白为什么它不将其绑定到UI
更新后的plunker。Shamila。这就是你要找的吗?是的。我得到了答案,谢谢。更改的plunker如下所示