私のUIビューの外に$ scopeにアクセスしたいと思います。私のアプリの構造は簡単です。それはここでは、完全なコードは、このMy todo app design
のような3枚のパネルを持つのToDoアプリですhttps://github.com/udayghulaxe/ticitic_todo
私は第三パネルで詳細を行うにアクセスしたい、である、と私はそれが$を使用してくださいする必要が欲しいです私は3つのパネルに別々のコントローラを割り当てています。私はクリックするとUIルータの状態を変更しています。 は、私はちょうど私が$ rootScopeでデータを渡したくない
<!-- Routers -->
.state('dashboard', {
url: '/dashboard',
abstract: true,
views: {
'': {
templateUrl: './partials/main.html'
},
'[email protected]': {
templateUrl: './views/header_toolbar.html'
},
'[email protected]': {
templateUrl: './views/sidenav.html'
},
'[email protected]': {
templateUrl: './views/todo_detail.html'
}
}
})
.state('dashboard.listdetail', {
url: '/lists/:list_id/',
templateUrl: './partials/list.detail.html',
controller: 'ListController',
resolve: {
list_id: function($stateParams) {
return $stateParams.list_id;
}
},
data: {
authorizedRoles: [USER_ROLES.user],
pageTitle: 'Lists'
}
})
.state('dashboard.tododetail', {
url: '/lists/:list_id/:todo_id',
templateUrl: './partials/list.detail.html',
controller: 'TodoDetailController',
resolve: {
list_id: function($stateParams) {
console.log($stateParams);
return $stateParams.list_id;
},
todo_id: function($stateParams) {
console.log($stateParams);
return $stateParams.todo_id;
}
}
})
<!-- ----------------Controllers --------------------- ->
app.controller("ListController", ['$rootScope', '$scope', '$state', '$q', 'UserService', '$window', 'AuthService', 'DataService', 'AUTH_EVENTS', 'list_id', '$mdSidenav',
function($rootScope, $scope, $state, $q, UserService, $window, AuthService, DataService, AUTH_EVENTS, list_id, $mdSidenav) {
$scope.value = 'this is value2';
$rootScope.list_id = list_id.toString();
$rootScope.todo_id = '';
$scope.current_list = UserService.GetTodoBylistid($rootScope.lists, $scope.list_id);
function toggleSidenav(menuId) {
$mdSidenav(menuId).open();
};
$scope.Toggle_Todo_Detail = function(todo_id) {
$state.go('dashboard.tododetail', {
list_id: $scope.list_id,
todo_id: todo_id
}, {
reload: false
});
toggleSidenav('right');
};
}
]);
app.controller("TodoDetailController", ['$rootScope', '$scope', '$state', '$q', 'UserService', '$window', 'AuthService', 'DataService', 'AUTH_EVENTS', 'list_id', '$mdSidenav', 'todo_id',
function($rootScope, $scope, $state, $q, UserService, $window, AuthService, DataService, AUTH_EVENTS, list_id, $mdSidenav, todo_id) {
}
]);
<!-- Main.html -->
<div id="appContainer" md-theme="{{ dynamicTheme }}" ng-init="load()" md-theme-watch>
<!-- Header Toolbar -->
<div ui-view="header_toolbar"></div>
<div layout="row" layout-xs="column" layout-sm="column">
<!-- Sidenav right view -->
<div ui-view="sidenavleft" id="nav_container"></div>
<!-- Main middle container -->
<div flex="100" flex-gt-sm="55" layout="column" id="list_content">
<md-content layout="column" flex class="md-padding">
<div ui-view></div>
</md-content>
</div>
<!-- Todo Detail View -->
<div ui-view="todo_detail" id="todo_detail_view"></div>
</div>
</div>
第三のパネルにデータを行うにアクセスしたい、と私はTODO項目をクリックして、両方のTODOリストを作成し、詳細を行うには、今すぐクリックしたときに、真ん中のテンプレートを消すだけです。
変数名$scope
はすでにヒントとして、それが目的だ
だから私は、リストのidとtodoのidに基づいてtodoの詳細を返すサービスを作成する必要がありますか?そのサービスを自分のTodoDetailControllerに追加します。 –
@PragmaDev - ちょっとした一般的な例が追加されました。はい、あなたが正しい。 Basciallyでは、サービスの背後にあるアイデアは、特定のデータにアクセスして操作する統一された方法を持つことです。例えば。将来的にサーバー側にデータを格納することでtodoServiceを拡張し、todosを操作して操作する明確なインターフェースを持つため、コントローラを変更する必要はありませんでした。 – MattDiMu
@MattDiMuI - それはすでに行っていましたが、$ scopeにあるデータにアクセスするときは、詳細ビューではアクセスできませんが、$ rootscopeにバインドするデータにはアクセスできます。 私は両方のパネルに異なるコントローラを割り当て、これを行うためにをクリックすると、状態を変更しますが、todoリストの中央部分を隠します - http://i.stack.imgur.com/3yGoR.png - - サービスはコントローラーでデータを利用できるようにしますが、これはuiビュー外ではアクセスできません。 –