Angularjs 函数未在不同视图上执行

Angularjs 函数未在不同视图上执行,angularjs,function,angularjs-scope,Angularjs,Function,Angularjs Scope,我是新来的angular JS。我使用ngRoute创建了一个简单的页面。 在第一个视图中,我有一个表,单击它会重定向到第二个视图。 但是我已经使用ng click调用了两个函数changeView函数运行良好。但是第二个函数无法在第二个视图上执行。 但如果在第一个视图中使用,则运行良好。 这是第一次查看的代码 Angular.php <div ng-app="myApp" ng-controller="dataCtr"> <table class='table table-s

我是新来的angular 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>

disp
功能在角度视图上工作正常。但未在第二个视图上布线。我认为在ng click中调用这两个视图的语法是正确的。或者,如果有任何其他方法可以将关联的表单元格值调用到第二个视图。请提供帮助。

第二个视图不起作用,因为您无法使用$scope。$apply()方法。 $apply()用于从angular框架外部执行angular中的表达式。$scope.$apply()在更改位置后立即知道事情已经更改

请更改以下代码部分,然后重试

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

经过大量研究,我找到了答案。我使用了工厂服务

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。 因为作用域在第二个控制器上丢失,所以服务帮助我们保留作用域值并在不同的控制器中使用它们。从第一个控制器存储作用域

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;
});

您应该为每个视图使用不同的控制器在两个视图中使用相同的控制器名称并不意味着视图是共享的。每次加载视图时,都会创建一个新的控制器。另外,为什么您的两个视图都有
ng-app
declarationok关于ng-app声明,我认为这是必要的(angular:)。关于使用同一个控制器,我认为单个站点的不同视图是这样工作的。但是使用两个控制器也不起作用。要在不同的控制器之间共享数据,使用必须使用服务,并且为了数据持久性,请使用本地存储。@DanishAltafSatti,我按照您的建议使用了工厂服务。非常感谢。您的意思是,在调用URLyes之后,我应该在我的changeView函数中调用disp()函数,因此,将$location.url替换为$location.path,然后添加$scope。$applyi尝试了location.path,但不起作用…它没有重定向到另一个视图…我是否应该为第二个视图使用其他控制器。?
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;
});