3 回答
TA贡献1847条经验 获得超7个赞
I 创建工作柱塞,演示如何使用$scope
还有UI-路由器。
状态定义不变:
$stateProvider // States .state("main", { controller:'mainController', url:"/main", templateUrl: "main_init.html" }) .state("main.1", { controller:'mainController', parent: 'main', url:"/1", templateUrl: 'form_1.html' }) .state("main.2", { controller:'mainController', parent: 'main', url: "/2", templateUrl: 'form_2.html' })
但是每个州都有不同的控制器。为什么?因为每个view
每一个国家获得new
实例定义的controller
..所以既然我们mainController
像下面这样,我们可以确定,如果我们导航到状态'main.2'
它将被实例化两次。
controller('mainController', function ($scope) { $scope.Model = $scope.Model || {Name : "xxx"};})
但是我们能看到的这里,我们检查一下$scope.Model
已经存在了.。如果不是(母国)我们实例化它新意 {Name : "xxx"}
.
嗯,我的意思是:只有父国会在$scope.Model
..其他人都会把它填满的。多么,怎样?答案是:
仅通过视图层次结构进行范围继承
请记住,只有在状态视图嵌套的情况下,范围属性才会向下继承。范围属性的继承与状态嵌套无关,与视图(模板)嵌套有关。
您完全可能拥有嵌套状态,其模板在站点中的各种非嵌套位置填充UI视图。在此场景中,不能期望在子状态视图中访问父状态视图的作用域变量。
因此,正如文件中所述。因为我们的子视图嵌套在父视图中,所以范围是继承的。
理解Scopes
在AngularJS中,子作用域通常是从其父作用域继承的。
...有“.”在您的模型中,将确保原型继承正在发挥作用。
// So, use<input type="text" ng-model="someObj.prop1"> // rather than<input type="text" ng-model="prop1">.
仅此而已。我们从UI-Router
视图和角度范围,因为我们巧妙地使用了引用类型(Model
),即确实有'.'
点入ng-model
定义-我们现在可以共享数据
注:有点“。”在ng-model="Model.PropertyName
简单地说,有一个reference
对象Model {}
拥有一些财产:PropertyName
TA贡献2080条经验 获得超4个赞
你可以通过整个范围$rootScope..如果您只需要范围的一部分,UI-路由器有一个自定义数据特征。
这是如何做一个多步骤的形式。我需要路线包含关于他们在流程中的步骤的信息。
首先,我有一些UI路由器的路由:
// Sign UP routes .state('sign-up', { abstract: true, url: '/sign-up', controller: 'SignupController', templateUrl: 'sign-up/index.html', }) .state('sign-up.start', { url: '-start', templateUrl: 'sign-up/sign-up.start.html', data: { step: 0, title: 'Welcome to Mars!', }, }) .state('sign-up.expertise', { url: '-expertise', templateUrl: 'sign-up/sign-up.expertise.html', data: { step: 1, title: 'Your Expertise'}, })
注意事项:
- 这个
元素在每条路径中。data
- 这个
州abstract
..这是这个多步表单的唯一控制器。这个SignupController
不是必需的,但是对于这个用例来说是有意义的。abstract
SignupController.js
angular.module('app').controller('SignupController', function($scope, $state) { $scope.state = $state;});
在这里,我们得到了UI-路由器的$state
穿上它$scope
以下是主要模板“登录/index.html”,如下所示:
<h2>{{state.current.data.title}}</h2><div>This is a multi-step-progress control {{state.current.data.step}}</div><form id="signUpForm" name="signUpForm" novalidate> <div ui-view></div></form>
子模板可以是他们喜欢的任何东西。
TA贡献1827条经验 获得超9个赞
.state("main", { controller:'mainController', abstract: true, url:"/main", templateUrl: "main_init.html" }) .state("main.1", { controller:'mainController1', parent: 'main', url:"/1", templateUrl: 'form_1.html' }) .state("main.2", { controller:'mainController2', parent: 'main', url: "/2", templateUrl: 'form_2.html' })
添加回答
举报