2015-10-14 53 views
1

我是角JS的新手。我使用ngRoute創建了一個簡單頁面。 在第一個視圖中,我有一個表格,點擊它後重定向到第二個視圖。 但我調用了ng-click這兩個函數,changeView函數運行正常。但第二個函數無法在第二個視圖上執行。 但它運行良好,如果使用第一視圖本身。
下面有用於第一視圖 Angular.php函數沒有在不同的視圖上執行

<div ng-app="myApp" ng-controller="dataCtr"> 
<table class='table table-striped'> 
<thead> 
<tr> 
<td>Title</td> 
<td>Stream</td> 
<td>Price</td> 
</tr> 
</thead> 
<tbody> 
<tr ng-repeat = "x in names | filter:filtr | filter:search" ng-click=" disp(x.id);changeView()"> 

<td >{{ x.Title }}</td> 
<td>{{ x.Stream }}</td> 
<td>{{ x.Price }}</td> 

</tr> 
</tbody> 
</table> 
</div> 

繼承人的代碼的第二視圖 details.php

<div ng-app="myApp" ng-controller="dataCtr"> 
<div class="container"> 
SELECTED:<input type="textfield" ng-model="stxt"> 
</div> 
</div> 

繼承人JS文件

var app = angular.module("myApp", ['ngRoute']); 

app.config(function($routeProvider) { 
$routeProvider 
    .when('/angular', { 
     templateUrl: 'angular.php', 
     controller: 'dataCtr' 
    }) 
    .when('/details', { 
     templateUrl: 'details.php', 
     controller: 'dataCtr' 
    }) 
    .otherwise({ 
     redirectTo: '/angular' 
    }); 
}); 
app.controller('dataCtr', function($scope ,$http ,$location ,$route ,$routeParams) { 
$http({ 
method: "GET", 
url: "json.php"}) 
.success(function (response) {$scope.names = response;});  
$scope.changeView = function() 
{ 
    $location.url('/details'); 
}; 

$scope.disp = function(id) 
{ 
    $scope.stxt = $scope.names[id-1].Title; 
}; 
}); 

disp函數在角度視圖上工作正常。但是沒有按照第二種觀點排列。我認爲用ng來點擊兩個視圖的語法是正確的。或者是否有任何其他方法將關聯的表格單元值調用到第二個視圖。請幫忙。

+0

對於每個視圖您應該有不同的控制器 –

+0

在兩個視圖中使用相同的控制器名稱並不意味着共享視圖。每次加載視圖時,都會創建一個新的控制器。此外,爲什麼你的兩個視圖都有ng-app聲明 – Chandermani

+0

ok關於ng-app聲明,我認爲這是必要的(對於angular :)而言)。關於使用相同的控制器,我認爲單個視圖的不同視圖現場工作這種方式。但使用兩個控制器也不起作用。 – ronit

回答

1

一個大量的研究後,我想它out.I使用的工廠服務

app.factory('Scopes', function ($rootScope) { 
var mem = {}; 
return { 
    store: function (key, value) { 
     $rootScope.$emit('scope.stored', key); 
     mem[key] = value; 
    }, 
    get: function (key) { 
     return mem[key]; 
    } 
}; 
}); 

添加到了JS。 因爲範圍大幹快上第二控制器丟失,服務幫助我們保留範圍值,並在不同的controllers.Stored使用它們的範圍從第一控制器

app.controller('dataCtr', function($scope ,$http ,$location,$rootScope,Scopes) { 
Scopes.store('dataCtr', $scope); 
//code 
}); 

,並裝載在借調控制器。

app.controller('dataCtr2', function($scope ,$timeout,$rootScope,Scopes){ 
$scope.stxt = Scopes.get('dataCtr').disp; 
}); 
0

由於無法使用$ scope。$ apply()方法,第二個視圖不起作用。 $ apply()用於在角度框架之外執行角度表達式。$ scope。$ apply()在您更改位置後立即執行Angular知道事情已經發生變化。

變化下面的代碼部分,再試一次

$location.path('/detail'); 
$scope.$apply(); 
+0

你的意思是我應該調用我的changeView函數中的disp()函數,之後調用URL – ronit

+0

是的,所以$ location.url替換爲$ location.path然後添加$ scope。$ apply –

+0

我試過location.path但那不是工作......它不會重定向到另一個視圖......我應該使用不同的控制器來進行第二個視圖。 – ronit