所以我有一個SPA使用AngularJS/UI-Router,我有一個部分,我需要從選擇/選項更改狀態。我本來鏈接在ng-repeat
這樣的:AngularJS/UI-路由器從選擇/選項改變狀態
<ul class="unstyled">
<li data-ng-repeat="course in courses">
<a data-ui-sref=".materials({ courseCode:course.CourseCode })">{{course.Title}}</a>
</li>
</ul>
的問題是,我將有向上的50門不同的課程可供選擇,所以我想將它們放到一個選擇/選項的設置是這樣的:
<select style="padding:3px 1px; width:100%;" data-ng-model="placeholder" data-ng-options="course.Title for course in courses track by course.CourseCode"></select>
現在,我知道我可以通過建立一個ng-repeat
,只是使用ng-model="placeholder"
上述變化範圍,但我需要從選擇/選項來改變狀態的能力。基本上,我有一個檢查發生在狀態改變,將拒絕或允許基於權限檢查的訪問。如果我可以從這個狀態進行權限檢查,那麼作爲一個選項,我可以做的更多,但是切換狀態並對其進行檢查似乎更容易。
一如既往,先謝謝您!
編輯:所以我看了多一些這個,我發現我也許能做點什麼ng-switch
和UI-路由器的$state.go
。以下是我想出了這麼遠:
控制器:
.controller('CoursesTrackCtrl', function ($scope, $stateParams, $http, $log, $state) {
$scope.changeState = function (course) {
$state.go('.materials({ courseCode:course.CourseCode })');
}
});
狀態與選擇:
<select style="padding:3px 1px; width:100%;" data-ng-model="course" data-ng-options="course.Title for course in courses" data-ng-change="changeState(course)">
<option value="">-- Select a Course --</option>
</select>
我得到了undefined is not a function
當我更改選項中選擇菜單。我可以得到一個警報,彈出並傳遞各個課程,所以我知道課程正在通過示波器。我確信$state
已被添加到控制器,但它似乎$state.go
不會去任何地方,我仍然不確定這是否是正確的語法實際通過$stateParams
通過像我正常ui-sref
。
解決方案:
隨着David Spence
的幫助下,我能解決我是有錯誤。我正在將$state
注入到控制器中,並將其用作參數,因此引發了錯誤。謝謝!
至於解決,這是代碼爲控制器的最後一節:
.controller('CoursesTrackCtrl', function ($scope, $stateParams, $http, $log, $state) {
$scope.changeState = function (course) {
$state.go('courses.track.materials', { courseCode: course.CourseCode });
}
});
最大的變化在這裏是爲$state.go
的語法,這需要解決國家的完整路徑(courses.track.materials
VS 。只是.materials
)和參數的語法不同於正常的ui-sref
語法,所以它必須設置爲{ parameter : value }
。
而對於國家本身:
<select style="padding:3px 1px; width:100%;" data-ng-model="course" data-ng-options="course.Title for course in courses" data-ng-change="changeState(course)">
<option value="">-- Select a Course --</option>
</select>
這已經大多不變,但大的事情是確保course
正在通過範圍傳遞。
希望這可以幫助別人!
爲'state.go'的語法是不同的,如果你在使用'上的用戶界面,sref'錨。相反,第一個參數是狀態名稱,第二個參數是參數。在你的情況下,類似於:'$ state.go('。materials',{courseCode:course.CourseCode});'。檢查[文檔](https://github.com/angular-ui/ui-router/wiki),你的州名是否真的以點開頭? –
你是男人。我剛剛發佈了一個完整的答案,但我會讚揚你,因爲那正是我最終做的。感謝您的幫助! – TheHouseplant